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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序算法 —— 快速排序

發布時間:2024/5/6 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法 —— 快速排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速排序算法介紹

劃分問題:把數組的各個元素重排后分成左右兩個部分,使得左邊任意元素都小于或等于右邊任意元素。

遞歸求解:把左右兩部分分別排序。

快速排序代碼

#include <iostream> using namespace std; void swap(int & a,int & b) {//交換變量a,b值int tmp=a;a=b;b=tmp; } void QuickSort(int a[],int s,int e) {if(s>=e)return ;int k=a[s];int i=s,j=e;while(i!=j){while(j>i&&a[j]>=k) --j;swap(a[i],a[j]);while(i<j&&a[i]<=k) ++i;swap(a[i],a[j]);}//處理完后,a[i]=kQuickSort(a,s,i-1);QuickSort(a,i+1,e); } int a[]={93,27,30,2,8,12,2,8,30,89}; int main () {int size=sizeof(a)/sizeof(int);QuickSort(a,0,size-1);for(int i=0;i<size;++i){cout<<a[i]<<",";}cout<<endl;return 0; }

快速選擇問題

輸入n個整數和一個正整數k(1<=k<=n),輸出這些整數從小到大排序后的第k個,n<=107。

分析

假設在快速排序的“劃分”結束后,數組A[p……r]被分成了A[p……q]和A[q+1……r],則可以根據左邊的元素個數q-p+1和k的大小關系只在左邊或者只在右邊遞歸求解。

代碼

#include <iostream> #include <algorithm>using namespace std;int qsort(int *a, int left, int right, int k) {//快速排序算法if (left > right) return 0; //遞歸邊界int centerV = a[left + (right - left) / 2]; //取標兵值int i = left, j = right;while (i <= j) {while (i <= j) {//從左往右掃描大于標兵值的元素,放在標兵值右側if (a[i] >= centerV) break;i++;}while (j >= i) {//從右往左掃描小于標兵值的元素,放在標兵值左側if (a[j] <= centerV) break;j--;}if (i > j) break; //退出條件swap(a[i], a[j]);i++;j--;}if (k - 1 <= i) //遞歸求左半解return qsort(a, left, j, k);else if (k - 1 > i + 1) //遞歸求右半解return qsort(a, i, right, k);elsereturn a[k - 1]; }int QuickSort(int *pInt, int n, int k) {return qsort(pInt, 0, n - 1, k); }int main() {int a[10] = {1, 2, 3, 4, 9, 33, 12, 8, 9, 10};int n = 10, k = 9;cout << "Before sorting: ";for (int i = 0; i < n; ++i) {cout << a[i] << ' ';}cout << endl;int ans = QuickSort(a, n, k);cout << "After sorting: ";for (int i = 0; i < n; ++i) {cout << a[i] << ' ';}cout << endl;cout << "Number " << k << " is: " << ans << endl;return 0; }

總結

以上是生活随笔為你收集整理的排序算法 —— 快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。