一.冒泡排序
原理:比較兩個(gè)相鄰的元素,將值大的元素交換至右端。
思路:依次比較相鄰的兩個(gè)數(shù),將小數(shù)放在前面,大數(shù)放在后面。
即在第一趟:首先比較第1個(gè)和第2個(gè)數(shù),將小數(shù)放前,大數(shù)放后。
然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將小數(shù)放前,大數(shù)放后。
重復(fù)第一趟步驟,直至全部排序完成。
舉例說(shuō)明:要排序數(shù)組:int[] arr={6,3,8,2,9,1};
第一趟排序:
第一次排序:6和3比較,6大于3,交換位置: 3 6 8 2 9 1
第二次排序:6和8比較,6小于8,不交換位置:3 6 8 2 9 1
第三次排序:8和2比較,8大于2,交換位置: 3 6 2 8 9 1
第四次排序:8和9比較,8小于9,不交換位置:3 6 2 8 9 1
第五次排序:9和1比較:9大于1,交換位置: 3 6 2 8 1 9
第一趟總共進(jìn)行了5次比較, 排序結(jié)果: 3 6 2 8 1 9
算法實(shí)現(xiàn):
public static int[] bubbleSort3(int []data) {
int temp;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data.length-i-1; j++) {
if (data[j]>data[j+1]) {
temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
return data;
}
二.快速排序
原理:對(duì)于給定的一組記錄,選擇一個(gè)基準(zhǔn)元素,通常選擇第一個(gè)元素或者最后一個(gè)元素,通過一趟掃描,將待排序列分成兩部分,一部分比基準(zhǔn)元素小,一部分大于等于基準(zhǔn)元素,此時(shí)基準(zhǔn)元素在其排好序后的正確位置,然后再用同樣的方法遞歸地排序劃分的兩部分,直到序列中的所有記錄均有序?yàn)橹埂?/strong>
舉例說(shuō)明:
一趟排序的過程:

算法如下:
public void fastSort(int[] a,int low,int high){
int start = low;
int end = high;
int key = a[low];
while(end>start){
//從后往前比較
while(end>start&&a[end]>=key) //如果沒有比關(guān)鍵值小的,比較下一個(gè),直到有比關(guān)鍵值小的交換位置,然后又從前往后比較
end--;
if(a[end]<=key){
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
//從前往后比較
while(end>start&&a[start]<=key)//如果沒有比關(guān)鍵值大的,比較下一個(gè),直到有比關(guān)鍵值大的交換位置
start++;
if(a[start]>=key){
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
//此時(shí)第一次循環(huán)比較結(jié)束,關(guān)鍵值的位置已經(jīng)確定了。左邊的值都比關(guān)鍵值小,右邊的值都比關(guān)鍵值大,但是兩邊的順序還有可能是不一樣的,進(jìn)行下面的遞歸調(diào)用
}
//遞歸
if(start>low) sort(a,low,start-1);//左邊序列。第一個(gè)索引位置到關(guān)鍵值索引-1
if(end<high) sort(a,end+1,high);//右邊序列。從關(guān)鍵值索引+1到最后一個(gè)
}
}
三.插入排序
原理:插入排序就是把當(dāng)前待排序的元素插入到一個(gè)已經(jīng)排好序的列表里面。
算法如下:
public static void insertSort(int[] array) { if (array == null || array.length < 2) { return; } for (int i = 1; i < array.length; i++) { int currentValue = array[i]; int position = i; for (int j = i - 1; j >= 0; j--) { if (array[j] > currentValue) { array[j + 1] = array[j]; position -= 1; } else { break; } } array[position] = currentValue; } }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注