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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

希尔排序之C++实现(高级版)

發(fā)布時(shí)間:2024/9/5 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 希尔排序之C++实现(高级版) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

希爾排序之C++實(shí)現(xiàn)(高級版)

一、源代碼:ShellSortHigh.cpp

1 /*希爾排序基本思想: 2 先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分組。 3 所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中。 4 先在各組內(nèi)進(jìn)行直接插入排序; 5 然后,取第二個(gè)增量d2<d1重復(fù)上述的分組和排序,直至所取的增量 =1(<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂? 6 */ 7 #include<iostream> 8 using namespace std; 9 /*定義輸出一維數(shù)組的函數(shù)*/ 10 void print(int array[], int n) 11 { 12 for (int i = 0; i < n; i++) 13 { 14 cout << array[i] << " "; 15 } 16 cout << endl; 17 } 18 /* 19 一種查找比較操作和記錄移動(dòng)操作交替地進(jìn)行的方法。 20 具體做法: 21  將待插入記錄R[i]的關(guān)鍵字從右向左依次與有序區(qū)中記錄R[j](j=i-1,i-2,…,1)的關(guān)鍵字進(jìn)行比較: 22  ① 若R[j]的關(guān)鍵字大于R[i]的關(guān)鍵字,則將R[j]后移一個(gè)位置; 23 ②若R[j]的關(guān)鍵字小于或等于R[i]的關(guān)鍵字,則查找過程結(jié)束,j+1即為R[i]的插入位置。 24  關(guān)鍵字比R[i]的關(guān)鍵字大的記錄均已后移,所以j+1的位置已經(jīng)騰空,只要將R[i]直接插入此位置即可完成一趟直接插入排序。 25 26 */ 27 int shellSort(int array[], int n) 28 { 29 //定義變量,記錄交換次數(shù) 30 int count = 0; 31 //定義中間變量,做為臨時(shí)交換變量 32 int temp; 33 //遍歷數(shù)組(進(jìn)行排序) 34 cout << "開始對數(shù)組進(jìn)行排序了..." << endl; 35 //定義初始增量值 36 int gap = n; 37 do{ 38 //初始增量變化規(guī)律 39 gap = gap / 3 + 1; 40 for (int i = gap; i < n; i++) 41 { 42 for (int j = i; j >= gap; j-=gap) 43 { 44 if (array[j] < array[j - gap]) 45 { 46 temp = array[j]; 47 array[j] = array[j - gap]; 48 array[j - gap] = temp; 49 cout << array[j] << "" << array[j - gap] << "互換了" << endl; 50 //輸出此時(shí)數(shù)組的順序 51 cout << "數(shù)組此時(shí)的順序是:"; 52 print(array, 10); 53 //每交換一次,記錄數(shù)加1 54 count++; 55 } 56 else 57 { 58 break; 59 } 60 } 61 } 62 } while (gap>1); 63 cout << "數(shù)組排序結(jié)束了..." << endl; 64 return count; 65 } 66 67 int main() 68 { 69 //定義待排序的一維數(shù)組 70 int array[] = { 1, 3, 4, 5, 2, 6, 10, 9, 8, 7 }; 71 //輸出原始數(shù)組 72 cout << "原始數(shù)組是:" << endl; 73 print(array, 10); 74 //對數(shù)組進(jìn)行排序 75 int count = shellSort(array, 10); 76 //輸出排序后的數(shù)組 77 cout << "排序后的數(shù)組是:" << endl; 78 print(array, 10); 79 cout << "共交換" << count << "" << endl; 80 return 0; 81 }

二、運(yùn)行效果

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zfc-java/p/7396429.html

總結(jié)

以上是生活随笔為你收集整理的希尔排序之C++实现(高级版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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