日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

快排,归并和Shell排序

發布時間:2025/4/16 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快排,归并和Shell排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

快速排序

快速排序的執行流程:

(1) 先從數列中取出一個數作為基準數。

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

(3)再對左右區間重復第二步,直到各區間只有一個數。

C程序實現:

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

Shell排序

Shell排序是對插入排序的改進。

Shell排序先選取一定的間隔,相差一個間隔的元素視為一個組,在每組內進行插入排序。

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

C程序實現:

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個長度為1的有序序列,將相鄰的有序表成對歸并,得到n/2個長度為2的有序表;

將這些有序序列再次歸并,得到n/4個長度為4的有序序列;如此反復進行下去,最后得到一個長度為n的有序序列。

C程序實現:

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]; } } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

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

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