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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2路插入排序算法是在直接插入排序算法的基礎上增加了一個輔助數組,其目的是減少排序過程中的移動次數,需要增加n個記錄的輔助空間。

難點可能在于對取余的考慮吧,可以把輔助數組看成一個環狀空間,這樣就能更好的理解輔助空間中最大值和最小值的位置了。

算法整體思想還是很簡單的,直接貼出可運行代碼,注釋還是挺清楚的,大家直接看就ok了

C語言實現示例

#include #include void insert_sort(int *arr, int *temp, int n) { int i, first, final, k; first = final = 0; temp[0] = arr[0]; for (i = 1; i < n; i ++) { if (arr[i] < temp[first]) { // 待插入元素比最小的元素小 first = (first - 1 + n) % n; temp[first] = arr[i]; } else if (arr[i] > temp[final]) { // 待插入元素比最大元素大 final = (final + 1 + n) % n; temp[final] = arr[i]; } else { // 插入元素比最小大,比最大小 k = (final + 1 + n) % n; while (temp[((k - 1) + n) % n] > arr[i]) { temp[(k + n) % n] =temp[(k - 1 + n) % n]; k = (k - 1 + n) % n; } temp[(k + n) % n] = arr[i]; final = (fianl + 1 + n) % n; } } // 將排序記錄復制到原來的順序表里 for (k = 0; k < n; k ++) { arr[k] = temp[(first + k) % n]; } } int main(void) { int i, n, *arr, *temp; while (scanf("%d", &n) != EOF) { arr = (int *)malloc(sizeof(arr) * n); temp = (int *)malloc(sizeof(temp) * n); for (i = 0; i < n; i ++) scanf("%d", &arr[i]); insert_sort(arr, temp, n); for (i = 0; i < n; i ++) printf("%d ", arr[i]); printf("n"); free(arr); free(temp); } return 0; }

同時附上C++寫法:

#includeusing namespace std;#define MAX 20void PrintArray(int a[],int len){ for(int i=0;i=d[final]){ final=final+1; d[final]=a[i]; } else{ int j=final++; while(a[i]>len; cout<>a[i]; BinInsertSort(a,len); system("pause"); return 0;}

【淺談2路插入排序算法及其簡單實現】相關文章:

總結

以上是生活随笔為你收集整理的2-路插入排序c语言算法,浅谈2路插入排序算法及其简单实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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