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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数据结构排序法之插入法

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构排序法之插入法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插入排序是一種簡單直觀的排序算法。它的工作原理非常類似于我們抓撲克牌。

對于未排序數據(右手抓到的牌),在已排序序列(左手已經排好序的手牌)中從后向前掃描,找到相應位置并插入。

插入排序在實現上,通常采用in-place排序(即只需用到O(1)的額外空間的排序),因而在從后向前掃描過程中,需要反復把已排序元素逐步向后挪位,為最新元素提供插入空間。
具體算法描述如下:

1、從第一個元素開始,該元素可以認為已經被排序
2、取出下一個元素,在已經排序的元素序列中從后向前掃描
3、如果該元素(已排序)大于新元素,將該元素移到下一位置
4、重復步驟3,直到找到已排序的元素小于或者等于新元素的位置
5、將新元素插入到該位置后
重復步驟2~5
代碼如下:

// 插入排序法 void Insert (int* a, int len) {int i, j, get;// 從數組第二個開始向后遍歷,和他之前的比較并找到插入的位置for (i = 1; i < len; i++){get = a[i]; // 保存要插入的數j = i-1; // 比較對象從他前一位開始// 找到比他小的,并且進行移位while (j >= 0 && a[j] > get){a[j+1] = a[j];j--;}a[j+1] = get; // 插入元素} }

對于插入排序,如果比較操作的代價比交換操作大的話,可以采用二分查找法來減少比較操作的次數,我們稱為二分插入排序。
代碼:

// 二分插入排序法 void Half_Insert (int* a, int len) {int i; // 從數組第二個開始向后遍歷,和他之前的比較并找到插入的位置for (i = 1; i < len; i++){int left = 0;int right = i - 1;int get = a[i];// 縮小范圍,直到找到插入的位置while (left <= right){int mid = (right+left) / 2;if (a[mid] > get){right = mid - 1;}else{left = mid + 1;} }// 移位int j;for (j = i-1; j >= left; j--){a[j+1] = a[j];}a[left] = get; // 插入元素 } }

總結

以上是生活随笔為你收集整理的数据结构排序法之插入法的全部內容,希望文章能夠幫你解決所遇到的問題。

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