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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++实现各种插入排序(直接,折半,希尔)

發布時間:2023/12/4 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++实现各种插入排序(直接,折半,希尔) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直接插入排序(無哨兵):

代碼如下:

#include <iostream> using namespace std;//數組下標從0開始 void InsertSort(int *a, int len) {int j;for (int i = 1; i < len; i++){if (a[i - 1] > a[i])//優化一下{int temp = a[i];for (j = i - 1; a[j] > temp && j >= 0; j--){a[j + 1] = a[j];}a[j + 1] = temp;}} }int main() {int a[] = { 300,124,32,534,4,124,532,52,4,21 };InsertSort(a, 10);for (int i = 0; i < 10; i++) cout << a[i] << " ";cout << endl;return 0; }

直接插入排序(要哨兵):

代碼如下:

#include <iostream> using namespace std;//數組下標從1開始 void InsertSort(int *a, int len) {int j;for (int i = 2; i <= len; i++){if (a[i - 1] > a[i])//優化一下{a[0] = a[i];for (j = i - 1; a[j] > a[0]; j--){a[j + 1] = a[j];}a[j + 1] = a[0];}} }int main() {int a[] = { 0,423,4,325,234,2,412,4,234,23,42,42,423,5,215,1 };InsertSort(a, 15);for (int i = 1; i <= 15; i++) cout << a[i] << " ";cout << endl;return 0; }

折半插入排序(有哨兵):

代碼如下:

#include <iostream> using namespace std;void BinsertSort(int *a, int len) {for (int i = 2; i <= len; i++){a[0] = a[i];int low = 1, high = i - 1;while (low <= high){int mid = (low + high) / 2;if (a[0] < a[mid]) high = mid - 1;else low = mid + 1;}int j;for ( j = i - 1; j >= high + 1; j--) a[j + 1] = a[j];a[j + 1] = a[0];} }int main() {int a[] = { 0,12,3,342,235,35,34,53,5,3,523 };BinsertSort(a, 10);for (int i = 1; i <= 10; i++) cout << a[i] << " ";cout << endl;return 0; }

希爾排序
寫法一:

代碼如下:

#include <iostream> using namespace std; void Insert_i(int *, int, int); void ShellSort(int *a, int len) {//數組下標從0開始for (int d = len / 2; d > 0; d /= 2){for (int i = d; i < len; i++){Insert_i(a, d, i);}} }void Insert_i(int *a, int d, int i) {int temp = a[i];int j;for ( j = i - d; j >= 0 && a[j] > temp; j -= d){a[j + d] = a[j];}a[j + d] = temp; }int main() {int a[] = { 21,3,423,5,324,324,12,41,45,23 };ShellSort(a, 10);for (int i = 0; i < 10; i++) cout << a[i] << " ";cout << endl;return 0; }

希爾排序
寫法二:

代碼如下:

#include <iostream> using namespace std; void Insert_i(int *, int, int); void ShellSort(int *a, int len) {//數組下標從1開始for (int d = len / 2; d > 0; d /= 2){Insert_i(a, len,d);} }void Insert_i(int *a, int len,int d) {for (int i = d + 1; i <= len; i++){if (a[i] < a[i - d]){int j;a[0] = a[i];for (j = i - d; j > 0 && a[0] < a[j]; j -= d)a[j + d] = a[j];a[j + d] = a[0];}} }int main() {int a[] = { 0,12,3,325,25,3,53,534,62,4,1241 };ShellSort(a, 10);for (int i = 1; i <= 10; i++) cout << a[i] << " ";cout << endl;return 0; }

總結

以上是生活随笔為你收集整理的C++实现各种插入排序(直接,折半,希尔)的全部內容,希望文章能夠幫你解決所遇到的問題。

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