放幾個排序算法, 快排、歸併、堆。

//堆排序
public void findMax(int[] array,int len,int index){
		int left=2*index+1;
		int right=2*index+2;
		int large=index;
		if(left<len&&array[left]>array[index]) large=left;
		if(right<len&&array[right]>array[large]) large=right;
		if(large!=index){
			int temp=array[large];
			array[large]=array[index];
			array[index]=temp;
			findMax(array,len,large);
		}
		
	}
	public void creatHeap(int[] array){
		int len=array.length;
		int index=len/2;
		for(int i=index;i>=0;i--){
			findMax(array,len,i);
		}
	}
	public void heapSort(int[] array){
		int len=array.length;
		creatHeap(array);
		for(int i=len-1;i>0;i--){
			int temp=array[i];
			array[i]=array[0];
			array[0]=temp;
			findMax(array,i,0);
		}
	}
//歸併
public void mergeSort(int[]s,int start,int end){
		if(start==end) return;
		else{
			int mid=(start+end)/2;
			mergeSort(s,start,mid);
			mergeSort(s,mid+1,end);
			merge(s,start,mid+1,end);
		}
		
	}

	private void merge(int[] s, int start, int i, int end) {
		// TODO Auto-generated method stub
		int end1=i-1;
		int sta=start;
		int[] temp=new int[end-start+1];
		int j=0;
		while(start<=end1&&i<=end){
			if(s[start]<s[i])
				temp[j++]=s[start++];
			else
				temp[j++]=s[i++];
		}
		while(start<=end1)
			temp[j++]=s[start++];
		while(i<=end) 
			temp[j++]=s[i++];
		for(int n=0;n<temp.length;n++) {
			//System.out.print(temp[n]+" ");
			s[n+sta]=temp[n];
		}
		
	}

//快排
public void quickSort(int[] s,int start,int end){
		if(start>end) return;
		int mid=fimid(s,start,end);
		quickSort(s,start,mid-1);
		quickSort(s,mid+1,end);		
	}
	private int fimid(int[] s, int start, int end) {
		// TODO Auto-generated method stub
		int key=s[start];
		int i=start;
		int j=end;
		while(i<j){
			while(i<j&&key<=s[j])j--;
			if(i<j){
			 s[i]=s[j];
			 i++;
			}
			while(i<j&&key>s[i])i++;
			if(i<j){
				s[j]=s[i];
	    		j--;
			}
		}
		s[i]=key;
		return i;
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章