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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

排序算法——归并排序

發(fā)布時間:2024/4/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法——归并排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

二路歸并排序

7.1 二路歸并排序的思想

  • 一次排序過程,將已經(jīng)各自有序的兩個段的數(shù)據(jù)合并一個段,并且合并后依舊有序。
  • 第一次我們認為單個數(shù)據(jù)是有序的,一個數(shù)據(jù)就是一個段,一次排序后,兩個數(shù)據(jù)就是一個有序數(shù)據(jù)段,這樣下一次每個有序數(shù)據(jù)段就是兩個數(shù)據(jù)。最后將其合并成一個完成有序段,則整個數(shù)據(jù)就已經(jīng)排序好了。

7.1二路歸并排序的實現(xiàn)

void Meger(int *arr, int len, int width, int *brr) {int low1 = 0;int high1 = low1 + width - 1; // high1為第一個段的結(jié)束位置下標int low2 = high1 + 1;int high2 = low2 + width > len ? len - 1 : low2 + width - 1;int index = 0;// 處理有兩個歸并段while (low2 < len){// 兩個歸并段都有未歸并數(shù)據(jù)while (low1 <= high1 && low2 <= high2){if (arr[low1] < arr[low2]) brr[index++] = arr[low1++];else brr[index++] = arr[low2++];}//只剩下一個歸并段數(shù)據(jù)while (low1 <= high1) brr[index++] = arr[low1++];while (low2 <= high2) brr[index++] = arr[low2++];low1 = high2 + 1;high1 = low1 + width - 1;low2 = high1 + 1;high2 = low2 + width > len ? len - 1 : low2 + width - 1;}//處理只剩下一個歸并段的情況while (low1 < len) brr[index++] = arr[low1++];//將brr中的數(shù)據(jù)全部復(fù)制到arr中for (int i = 0; i < len; ++i) arr[i] = brr[i]; }void MegerSort(int *arr, int len) {int *brr = (int *)malloc(sizeof(int) * len);assert(brr != NULL);// i就是每個段當前的數(shù)據(jù)個數(shù)for (int i = 1; i < len; i *= 2){Meger(arr, len, i, brr);}free(brr); }

總結(jié)

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

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