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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 用迭代的方式实现归并排序

發(fā)布時間:2024/2/28 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 用迭代的方式实现归并排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歸并排序

思路如下:(用一個別人個圖)


兩天加在一起寫了三個小時才寫出來,思路比較亂,簡單的歸并排序讓我給寫復雜了,代碼里能看出來好多修補bug的痕跡。

自己生成了幾個測試用例,用666、500、100個數(shù)都試了試,排序結(jié)果沒有問題。
應(yīng)該沒什么bug吧

代碼

#include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n;cin >> n;vector<int> arr1;int t;int i;for (i = 0; i < n; i++){cin >> t;arr1.push_back(t);}vector<int> temp;int j1, j2;int part = 0;//第幾段int curPush = 0;for (i = 1; i < n; i *= 2)//i表示當前連續(xù)i個數(shù)字有序{part = 0;//正在對第part部分排序for (j1 = 0, j2 = 0; j1 < i || j2 < i; ){if ((part + 1)*i + j2 >= n)//對于將要比較的兩段來說,如果后一段的第一項就超出了vector范圍,說明后一段不存在,也就是不足以構(gòu)成兩段。因此把前一段的所有元素都一個個挨著push進去{for (int t = 0; part*i + j1 + t < n; t++)//push的過程{temp.push_back(arr1[part*i + j1 + t]);if (temp.size() == n)break;}break;}if (arr1[part*i + j1] < arr1[(part + 1)*i + j2])//正在比較的兩項{temp.push_back(arr1[part*i + j1]);curPush++;j1++;}else if (arr1[part*i + j1] >= arr1[(part + 1)*i + j2])//正在比較的兩項{temp.push_back(arr1[(part + 1)*i + j2]);curPush++;j2++;}if (j1 >= i || j2 >= i)//當比較兩部分時,如果其中一部分已經(jīng)全部push進去了,那么就把另外一部分一個一個挨著push進去{for (; j1 < i; j1++){if (temp.size() == n)break;temp.push_back(arr1[part*i + j1]);curPush++;}for (; j2 < i; j2++){if (temp.size() == n)break;temp.push_back(arr1[(part + 1)*i + j2]);curPush++;}part += 2;//對后兩部分排序j1 = 0;j2 = 0;curPush = 0;}}//復制for (int k = 0; k < n; k++){arr1[k] = *temp.begin();temp.erase(temp.begin());}}//輸出歸并排序結(jié)果cout << "你的排序:" << endl;for (int k = 0; k < n; k++){cout << arr1[k] << " ";}cout << endl;//輸出自帶sort函數(shù)排序結(jié)果cout << "答案:" << endl;sort(arr1.begin(), arr1.end());for (int k = 0; k < n; k++){cout << arr1[k] << " ";}cout << endl;system("pause"); }

總結(jié)

以上是生活随笔為你收集整理的C++ 用迭代的方式实现归并排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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