幾種排序的比較

布瑋發表於2018-09-12

幾種排序的比較


請優待自己。 –Ruider


借鑑別人的優秀總結,推薦博文

快速排序

import java.security.PublicKey;

/*
    用最簡單的方式解釋最快排序演算法。。。。以及程式碼的展示。。
    
  演算法思路:
  	1.定一個基數,基數就是一組數中的一個基準數,比如[  1 2 3 4 5]中選擇1作為基數
  	2.定義i從陣列的結尾向前遍歷,找到小於基數的數字,找到就停
  	3.定義j從陣列的頭部開始遍歷,尋找大於基數的值,找到就停。
  	4.判斷i是否大於j,當i>j時,交換i,j位置的值。
  	5.繼續遍歷,直到i==j,此時交換基數與i的位置
  	6.此時基數左邊是小於基數的值,右邊是大於基數的值。
  	7.將基數 左右兩邊的陣列分割,形成兩個小陣列,繼續前面的步驟,處理這兩個小陣列。
  	
  	關鍵字:基數,先左後右遍歷,分割
  	
  	程式碼如下:
 * */
public class QuickSort {
	
	public static void quickSort(int[] arr,int low,int high){
		if(low>high)
			return;
		int i,j,temp;
		i=low; j=high;
		temp=arr[low];
		while(i<j){
			while(arr[j]>=temp&&i<j){   //j從尾部開始向前迭代,直到找到小於基數的值,保證i<j
				j--;
			}
			while(arr[i]<=temp&&i<j){  //i從頭部開始向後迭代,直到找到大於基數的值,保證i<j
				i++;
			}
			if(i<j){
				int a=arr[i];
				arr[i]=arr[j];
				arr[j]=a;
			}
		}
		arr[low]=arr[i];   //將基數放到分割線位置
		arr[i]=temp;
		
		quickSort(arr, low, j-1);
		quickSort(arr, j+1, high);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr={1,3,6,8,4,6,2};
		quickSort(arr, 0, arr.length-1);
		for(int i:arr)
			System.out.println(i);
	}

}

選擇排序

選擇排序是在所有數中按照角標找到更小的值

public static int[] selectSort(int[] array){
	if(array==null||array.length==0){
		return;
	}
	int length=array.length
	if(length==1){
		return array;
	}
	int min=0;
	for(int i=0;i<length-1;i++){
		min=i;
		for(int j=i+1;j<length;j++){
				if(array[min]>array[j]){
					min=j;
				}
		}
		if(min!=i){
			int temp=array[i];
			array[i]=array[min];
			array[min]=temp;
		}
	}
}

相關文章