91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c++中如何實現快速排序

發布時間:2022-04-14 11:04:01 來源:億速云 閱讀:130 作者:iii 欄目:編程語言

這篇文章主要介紹“c++中如何實現快速排序”,在日常操作中,相信很多人在c++中如何實現快速排序問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”c++中如何實現快速排序”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

說一說快速排序

快速排序,實際中最常用的一種排序算法,速度快,效率高,在N*logN的同等級算法中效率名列前茅。· 

基本思想:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分所有數據要小,然后再按此方法對這兩部分數據分別進行快速排序。整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

c++中如何實現快速排序

將數列變成上述形式,這一步很關鍵,做好這一步,才能對主元左右的部分進行遞歸調用。以下是實現這一部分的代碼:

 int partition_sort(int arr[],int l,int r)//l是數組最左邊,r為最右邊 
 {
   int j=l;//設計標記 
   int t=arr[l];//設置主元 
 
   for(int i=l+1;i<=r;i++)
   {
     if(arr[i]<t){
       swap(arr[j+1],arr[i]);
       j++;
     }
   }
   
   swap(arr[l],arr[j]);
   return j;
 }

上述代碼中,我把最左邊的元素當作主元,這樣的代碼對大多數排序都很高效,但是不排除個別情況(當數組近乎有序或者當數組內有大量重復元素),這時,我們的排序算法相比于歸并排序顯得并不是那么高效,這和我們的排序算法原理密不可分,細細分析,當數組近乎有序時,我們的快速排序竟然退化到了O(n^2)級別,這顯然是非常不高效的。

 要想實現上述不足的優化,我們可以將主元隨機選擇,或者采用其他方式的快速排序(雙路快速排序,三路快速排序),本篇內容僅作為學習快排的基本思想和基本實現,不深入涉及,有興趣的讀者可查閱資料了解。

下面是全部的實現代碼:

 #include <iostream>
 #include <math.h>
 using namespace std;
 //實現函數,用于partition的遞歸 
 int partition_sort(int arr[],int l,int r)//l是數組最左邊,r為最右邊 
 {
   int j=l;//設計標記 
   int t=arr[l];//設置主元 
 
   for(int i=l+1;i<=r;i++)
   {
     if(arr[i]<t){
       swap(arr[j+1],arr[i]);
       j++;
     }
   }
   
   swap(arr[l],arr[j]);
   return j;
 }
 //實現遞歸的調用函數 
 void partition(int arr[],int l,int r)
 {
   if(l>=r)return ;
   
   int p=partition_sort(arr,l,r);
   partition(arr,l,p-1);
   partition(arr,p+1,r);
 }
 
 int main()
 {
   int a[5];
   for(int i=0;i<5;i++)
   {
     cin>>a[i];  
   } 
   partition(a,0,4);
   
   
   for(int i=0;i<5;i++)
   {
     cout<<a[i]<<" ";  
   } 
   return 0;  
 }

到此,關于“c++中如何實現快速排序”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

皋兰县| 宁武县| 澎湖县| 固镇县| 鄱阳县| 平泉县| 淮安市| 静安区| 岗巴县| 连江县| 石泉县| 上虞市| 文安县| 镇平县| 工布江达县| 龙川县| 宣威市| 红桥区| 新野县| 健康| 安阳县| 云阳县| 玉山县| 桂林市| 塘沽区| 和硕县| 凌源市| 白山市| 元氏县| 永仁县| 耒阳市| 无为县| 凌海市| 五指山市| 泾阳县| 蓬溪县| 通化市| 沙雅县| 扶沟县| 马边| 甘泉县|