選擇排序效率是冒泡的2倍。算法
冒泡算法描述:
在解釋冒泡排序算法以前,先來介紹把10個數(放在數組A中)中最大的那個數放在最後位置上的一種算法。算法描述以下:
(1)從數組A[1]到A[10],把相臨的兩個數兩兩進行比較。即A[1]和A[2]比較,比較完後A[2]再與A[3]比較,……最後是A[9]和A[10]比較。
(2)在每次進行比較的過程當中,若是前一個數比後一個數大,則對調兩個數,也就是說把較大的數調到後面,較小的調到前面。好比在第一次的比較中,若是A[1]比A[2]大則A[1]和A[2]的值就互換。下圖用6個數據來講明以上的算法。
假設6個數據是:A[]=5 7 4 3 8 6
A[1] A[2] A[3] A[4] A[5] A[6]
5 7 4 3 8 6 第一次,A[1]=5和A[2]=7比較,7>5,不進行對調。
5 7 4 3 8 6 第二次,A[2]=7和A[3]=4比較,4<7,進行對調,
那麼第二次比較完後的數據是5 4 7 3 8 6
5 4 7 3 8 6 第三次,A[3]=7和A[4]=3比較,3<7,進行對調,
那麼第三次比較完後的數據是5 4 3 7 8 6
5 4 3 7 8 6 第四次,A[4]=7和A[5]=8比較,8>7,不進行對調。
5 4 3 7 8 6 第五次,A[6]=6和A[5]=8比較,6<8,進行對調,
那麼第五次也就是最後一次的結果是
5 4 3 7 6 8 數組
public void bublleSort(int[] array){
int length = array.length;
for(int i=length-1;i>0;i--)
for(int j=0;j<i;j++)
if(array[j] < array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
spa
選擇排序算法描述:
在介紹選擇排序法以前先介紹一種把最小的數放在第一個位置上 的算法,固然也能夠用前面所講的冒泡排序法,如今咱們改用一種新的算法:其指導思想是先並不急於調換位置,先從A[1]開始逐個檢查,看哪一個數最小就記下 該數所在的位置P,等一躺掃描完畢,再把A[P]和A[1]對調,這時A[1]到A[10]中最小的數據就換到了最前面的位置。算法的步驟以下:
1)、先假設A[1]中的數最小,記下此時的位置P=1;
2)、依次把A[P]和A[I](I從2變化到10)進行比 較,每次比較時,若A[I]的數比A[P]中的數小,則把I的值賦給P,使P老是指向當前所掃描過的最小數的位置,也就是說A[P]老是等於全部掃描過的 數最小的那個數。在依次一一比較後,P就指向10個數中最小的數所在位置,即A[P]就是10個數中最小的那個數;
3)把A[P]和A[1]的數對調,那麼最小的數就在A[1]中去了,也就是在最前面了。
若是如今重複此算法,但每重複一次,進行比較的數列範圍就向 後移動一個位置。即第二遍比較時範圍就從第2個數一直到第N個數,在此範圍內找最小的數的位置P,而後把A[P]與A[2]對調,這樣從第2個數開始到第 N個數中最小數就在A[2]中了,第三遍就從第3個數到第N個數中去找最小的數,再把A[P]與A[3]對調……此過程重複N-1次後,就把A數組中N個 數按從小到大的順序排好了。這種排序的方法就是選擇排序法 。 public void selectSort(int[] a){
int length = a.length;
for(int i=0;i<a.length;i++){
int min = i;
/**
內層循環,在未排的部分中找到最小的那個
把它的下標記在index變量中
*/
for(int j=i+1;j<a.length;j++){
if (a[j] < a[min]){
min = j;
}
}
if (min != i){
int temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
}排序