日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

关于冒泡、快排、二分排序算法分析

發(fā)布時(shí)間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于冒泡、快排、二分排序算法分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前面的話:

把自己總結(jié)的排序方法分享一下,也當(dāng)作自己的筆記本了
冒泡: 冒泡排序算法的主要思想是每次只比較相鄰的兩個(gè)元素,一輪排序之后,最大的元素就會(huì)沉到最下面(全文默認(rèn)升序),然后每次循環(huán)比較,就可以得到一個(gè)已排序好的數(shù)組。

代碼實(shí)現(xiàn):
public static void main(String[] args) {int[] num = {8,20,1,3,9,5,41,10,11,2};//冒泡排序for (int i = 0; i < num.length-1; i++) { //控制比較輪次for (int j = 0; j < num.length-i-1; j++) { //控制每輪中各個(gè)元素的比較次數(shù)if (num[j]>num[j+1]) { //升序int temp = num[j+1];num[j+1] = num[j];num[j] = temp;}}}Out(num);}//輸出數(shù)組中元素 public static void Out(int[] arrs) {for (int i = 0; i < arrs.length; i++) {System.out.println(arrs[i]);} }

經(jīng)過(guò)這樣的排序之后,數(shù)組就有序了!其中內(nèi)循環(huán)為什么要寫(xiě) num.length-i-1 呢? 因?yàn)榻?jīng)過(guò)一輪循環(huán)之后,最大的元素就會(huì)沉到最下面,所以在后面比較的時(shí)候就不需要再參與比較了。num[j]>num[j+1] 這個(gè)是只比較兩個(gè)相鄰的元素。
快速排序: 快速排序算是冒泡排序的改進(jìn)算法,有很多方法可以實(shí)現(xiàn),我這里用了最經(jīng)典的 挖坑法 來(lái)解決問(wèn)題,直接上代碼。

代碼實(shí)現(xiàn):
static void sort(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) //如果沒(méi)有比關(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)//如果沒(méi)有比關(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)用}//遞歸比較后面的數(shù)據(jù)//現(xiàn)在數(shù)組右邊的都是比第一輪哨兵小的數(shù)據(jù)//數(shù)組左邊的數(shù)據(jù)都是比第一輪哨兵大的數(shù)據(jù)//兩邊數(shù)據(jù)中不是有序的,所以后面要遞歸排序if(start>low) sort(a,low,start-1);//左邊序列。第一個(gè)索引位置到關(guān)鍵值索引-1if(end<high) sort(a,end+1,high);//右邊序列。從關(guān)鍵值索引+1到最后一個(gè) } public static void main(String[] args) {int[] num = {80,16,100,35,85,20,12,90,110,5};sort(num, 0, num.length-1);//outfor (int i = 0; i < num.length; i++) {System.out.print(num[i] + " ");} }

可能大家看的云里霧里的,下面附上小編準(zhǔn)備的一張手寫(xiě)步驟紙:

自己親手將快排的第一輪的排序過(guò)程寫(xiě)了出來(lái),還算清晰,其中,在每輪排序的時(shí)候都會(huì)設(shè)置一個(gè)哨兵(key) 來(lái)和后面的數(shù)據(jù)進(jìn)行比較,比較的順序是 左右交替 進(jìn)行比較。

總結(jié)

以上是生活随笔為你收集整理的关于冒泡、快排、二分排序算法分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。