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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

快排,归并和Shell排序

發(fā)布時(shí)間:2025/4/16 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快排,归并和Shell排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

快速排序

快速排序的執(zhí)行流程:

(1) 先從數(shù)列中取出一個(gè)數(shù)作為基準(zhǔn)數(shù)。

(2) 將比這個(gè)數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊。

(3)再對(duì)左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個(gè)數(shù)。

C程序?qū)崿F(xiàn):

int *q_sort(int *arr, int left, int right) {int i, j, t, temp;if (left >= right) {return arr; }temp = arr[left]; //選擇基準(zhǔn)值i = left;j = right;while (i != j) {while (arr[j] >= temp && i<j) { //在右序列定位一個(gè)小于基準(zhǔn)值的元素j--;}while (arr[i] <= temp && i<j) { //在左序列定位一個(gè)大于基準(zhǔn)值的元素i++;}if (i < j) { //交換t = arr[i];arr[i] = arr[j];arr[j] = t; } }arr[left] = arr[i];arr[i] = temp;q_sort(arr,left, i-1); //左側(cè)序列遞歸q_sort(arr,i+1, right); //右側(cè)遞歸return arr; }

Shell排序

Shell排序是對(duì)插入排序的改進(jìn)。

Shell排序先選取一定的間隔,相差一個(gè)間隔的元素視為一個(gè)組,在每組內(nèi)進(jìn)行插入排序。

然后選取更小的間隔(一般折半)進(jìn)行插入排序,直至間隔為1。

C程序?qū)崿F(xiàn):

int *shell_sort(int *arr, int Len) {int i, j, t, gap;for (gap = Len / 2; gap > 0; gap /= 2) {for (i = gap; i < Len; i++) {for ( j = i - gap; j >= 0 && arr[j] > arr[j + gap]; j -= gap) {t = arr[j];arr[j] = arr[j+gap];arr[j+gap] = t;}}}return arr; }

歸并排序

將待排序序列R[0...n-1]看成是n個(gè)長(zhǎng)度為1的有序序列,將相鄰的有序表成對(duì)歸并,得到n/2個(gè)長(zhǎng)度為2的有序表;

將這些有序序列再次歸并,得到n/4個(gè)長(zhǎng)度為4的有序序列;如此反復(fù)進(jìn)行下去,最后得到一個(gè)長(zhǎng)度為n的有序序列。

C程序?qū)崿F(xiàn):

void merge_sorting(int *arr, int first, int last, int *temp) {int mid = (first + last) / 2; if (first < last) {merge_sorting(arr, first, mid, temp);merge_sorting(arr, mid + 1, last, temp);merge_array(arr,first, mid, last, temp);} }void merge_array(int *arr, int first, int mid, int last, int *temp) {int i = first, j = mid + 1, k = 0;int m = mid, n = last;while (i <= m && j <= n) {if (arr[i] <= arr[j]) {temp[k++] = arr[i++]; }else {temp[k++] = arr[j++]; } }while (i <= m) {temp[k++] = arr[i++]; }while (j <= n) {temp[k++] = arr[j++]; }for (i = 0; i < k; i++) {arr[first + i] = temp[i]; } } 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的快排,归并和Shell排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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