1. 程式人生 > 實用技巧 >氣泡排序,快速排序

氣泡排序,快速排序

氣泡排序:

1) 實現的方式:重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,按照一個順序交換(可以從大到小,也可以從小到大),直到元素列排序完成。

2)名字的由來:因為越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“氣泡排序”

3)圖解:

4)演算法分析:

時間複雜度

若檔案的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數和記錄移動次數

均達到最小值:,。 所以,氣泡排序最好的時間複雜度為。 若初始檔案是反序的,需要進行趟排序。每趟排序要進行次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:
氣泡排序的最壞時間複雜度為 綜上,因此氣泡排序總的平均時間複雜度為。

演算法穩定性

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;

如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法。

5)java的實現: publicstaticvoidbubbleSort(intarr[]){ for(inti=0;i<arr.length-1
;i++){ for(intj=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ inttemp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } 參考:https://baike.baidu.com/item/氣泡排序/4602306 快速排序演算法: 1. 快速排序(Quicksort)是對氣泡排序的一種改進。 2.由來:快速排序由C. A. R. Hoare在1960年提出。 它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以
遞迴
進行,以此達到整個資料變成有序序列。 java實現: publicstaticint[]qsort(intarr[],intstart,intend){ intpivot=arr[start]; inti=start; intj=end; while(i<j){ while((i<j)&&(arr[j]>pivot)){ j--; } while((i<j)&&(arr[i]<pivot)){ i++; } if((arr[i]==arr[j])&&(i<j)){ i++; }else{ inttemp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } if(i-1>start)arr=qsort(arr,start,i-1); if(j+1<end)arr=qsort(arr,j+1,end); return(arr); } publicstaticvoidmain(String[]args){ intarr[]=newint[]{3,3,3,7,9,122344,4656,34,34,4656,5,6,7,8,9,343,57765,23,12321}; intlen=arr.length-1; arr=qsort(arr,0,len); for(inti:arr){ System.out.print(i+"\t"); } } 來源:https://baike.baidu.com/item/快速排序演算法/369842?fr=kg_qa