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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

c/c++

插入排序 希尔排序 C++

發(fā)布時(shí)間:2023/12/4 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 插入排序 希尔排序 C++ 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最優(yōu)時(shí)間復(fù)雜度為o(n),又稱(chēng)縮小增量排序。

邏輯分析:

1、希爾排序首先是確定增量,默認(rèn)的希爾增量(不一定是最優(yōu))為length/2。

2、根據(jù)增量分組,將分組的元素利用直接插入法排序。

3、增量=增量/2,再次分組,一直到增量為1為止。

? ? 通過(guò)上述步驟我們可以知道,代碼會(huì)有3個(gè)循環(huán),第一個(gè)gap的更新,即for(int gap=len/2;gap>0;gap/=2)。第二個(gè)和第三個(gè)循環(huán)是對(duì)分組數(shù)組進(jìn)行直接插入排序。

代碼分析:

?數(shù)組a[] = { 2,1,4,5,3,8,7,9,0,6 },length=10。

第一次大循環(huán)

gap=length/2=5,i=5,j=i-gap=0,a[j]=2<a[j+gap]=8,此時(shí)數(shù)組不做任何操作。

gap=length/2=5,i=6,j=i-gap=1,a[j]=1<a[j+gap]=7,此時(shí)數(shù)組不做任何操作。

gap=length/2=5,i=7,j=i-gap=2,a[j]=4<a[j+gap]=9,此時(shí)數(shù)組不做任何操作。

gap=length/2=5,i=8,j=i-gap=3,a[j]=5<a[j+gap]=0,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 2,1,4,0,3,8,7,9,5,6 }。

gap=length/2=5,i=9,j=i-gap=4,a[j]=3<a[j+gap]=6,此時(shí)數(shù)組不做任何操作。

第二次大循環(huán)

gap=gap/2=2,i=2,j=i-gap=0,a[j]=3<a[j+gap]=4,此時(shí)數(shù)組不做任何操作。

gap=gap/2=2,i=3,j=i-gap=1,a[j]=1>a[j+gap]=0,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 2,0,4,1,3,8,7,9,5,6 }。

gap=gap/2=2,i=4,j=i-gap=2,a[j]=4>a[j+gap]=3,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 2,0,3,1,4,8,7,9,5,6 }。

gap=gap/2=2,i=4,j=i-gap=0,a[j]=2<a[j+gap]=3,此時(shí)數(shù)組不做任何操作。

gap=gap/2=2,i=5,j=i-gap=3,a[j]=1<a[j+gap]=8,此時(shí)數(shù)組不做任何操作。

gap=gap/2=2,i=6,j=i-gap=4,a[j]=4<a[j+gap]=7,此時(shí)數(shù)組不做任何操作。

gap=gap/2=2,i=7,j=i-gap=5,a[j]=8<a[j+gap]=9,此時(shí)數(shù)組不做任何操作。

gap=gap/2=2,i=8,j=i-gap=6,a[j]=7>a[j+gap]=5,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 2,0,3,1,4,8,5,9,7,6 }。

gap=gap/2=2,i=9,j=i-gap=7,a[j]=9>a[j+gap]=6,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 2,0,3,1,4,8,5,6,7,9 }。

第三次大循環(huán)

gap=gap/2=1,i=1,j=i-gap=0,a[j]=2>a[j+gap]=0,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,2,3,1,4,8,5,6,7,9 }。

gap=gap/2=1,i=2,j=i-gap=1,a[j]=2<a[j+gap]=3,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=3,j=i-gap=2,a[j]=3>a[j+gap]=1,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,2,1,3,4,8,5,6,7,9 }。

gap=gap/2=1,i=3,j=j-gap=1,a[j]=2>a[j+gap]=1,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,1,2,3,4,8,5,6,7,9 }。

gap=gap/2=1,i=3,j=j-gap=0,a[j]=0<a[j+gap]=1,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=4,j=i-gap=3,a[j]=3<a[j+gap]=4,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=5,j=i-gap=4,a[j]=4<a[j+gap]=8,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=6,j=i-gap=5,a[j]=8>a[j+gap]=5,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,1,2,3,4,5,8,6,7,9 }。

gap=gap/2=1,i=6,j=j-gap=4,a[j]=4<a[j+gap]=5,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=7,j=i-gap=6,a[j]=8>a[j+gap]=6,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,1,2,3,4,5,6,8,7,9 }。

gap=gap/2=1,i=7,j=j-gap=5,a[j]=5<a[j+gap]=6,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=8,j=i-gap=7,a[j]=8>a[j+gap]=7,故交換a[j]和a[j+gap],數(shù)組a[]=?{ 0,1,2,3,4,5,6,7,8,9 }。

gap=gap/2=1,i=8,j=j-gap=6,a[j]=6<a[j+gap]=7,此時(shí)數(shù)組不做任何操作。

gap=gap/2=1,i=9,j=i-gap=8a[j]=8<a[j+gap]=9,此時(shí)數(shù)組不做任何操作。

排序完成,輸出數(shù)組a[]=?{ 0,1,2,3,4,5,6,7,8,9 }。

#include<iostream> #include<cstdlib>using namespace std;//交換 void swap(int &a, int &b) {int temp = a;a = b;b = temp; }//希爾排序,首先根據(jù)增量分組,然后對(duì)分組元素進(jìn)行直接插入排序 void shellSort(int a[], int length) {for (int gap = length/2; gap>0; gap/=2){for (int i = gap; i<length;++i){for (int j = i - gap; j >=0 && a[j] > a[j + gap]; j -= gap){swap(a[j], a[j + gap]);}}}}int main() {int a[] = { 2,1,4,5,3,8,7,9,0,6 };shellSort(a, 10);for (int i = 0; i < 10; i++){cout << a[i] << "";}cout << endl;system("pause");return 0;}

發(fā)現(xiàn)上述代碼真的有好多重復(fù)的地方,加了一個(gè)標(biāo)志,來(lái)改進(jìn)一下

#include<iostream> #include<cstdlib>using namespace std;void swap(int &a, int &b) {int temp = a;a = b;b = temp; }void shellSort(int a[], int length) {for (int gap = length/2; gap>0; gap/=2){for (int i = gap; i<length;++i){bool action = true;for (int j = i - gap; j >=0 && action; j -= gap){if (a[j] > a[j + gap]){swap(a[j], a[j + gap]);}else action = false;}}}}int main() {int a[] = { 65,44,77,5,24,89,72,58,40,69 };shellSort(a, 10);for (int i = 0; i < 10; i++){cout << a[i] << " ";}cout << endl;system("pause");return 0;}

?

總結(jié)

以上是生活随笔為你收集整理的插入排序 希尔排序 C++的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 91高清无打码 | 一本之道高清无码视频 | 另类专区亚洲 | 在线播放黄色网址 | 亚洲熟女乱色综合亚洲小说 | 国产精品免费电影 | 亚洲精品综合久久 | 青青青视频免费 | 亚洲一区二区三区久久 | 91网站免费看 | 黄色国产免费 | 最近免费中文字幕 | 女人18岁毛片 | 国产精品久久久久久久免费观看 | 欧美成人精品二区三区99精品 | 久久成人小视频 | 伊人青青草 | 动漫3d精品一区二区三区乱码 | 久久精品一区二区三区不卡牛牛 | 亚洲丝袜av | 伊人3 | 中文字幕第7页 | 久久精品一区二区免费播放 | 国产女主播一区二区三区 | 亚洲精品乱码久久久久久蜜桃不卡 | 国产盗摄在线观看 | 岛国一区| 欧美日本一道 | 99久热在线精品996热是什么 | 国产av不卡一区二区 | 岛国毛片在线观看 | 国产视频精品自拍 | 亚洲深夜视频 | 亚洲欧洲久久久 | 日韩精品二区在线观看 | 午夜激情视频网站 | 国产在线一二三区 | 爱欲av | 水蜜桃色314在线观看 | 97精品人妻一区二区三区蜜桃 | 老熟妇仑乱一区二区视频 | 美女无遮挡网站 | 特黄特色大片免费视频大全 | 日本大尺度吃奶做爰久久久绯色 | 亚洲大片免费观看 | 国精品人妻无码一区二区三区喝尿 | 欧美国产日韩视频 | 淫片网站 | 日日摸日日| 黄色国产在线观看 | 人成亚洲 | 黄色av网址在线观看 | 国产精品第9页 | 都市乱淫 | 国产三级午夜理伦三级 | 99国产在线视频 | 欧美精品久久久 | 欧洲mv日韩mv国产 | 亚洲精品在 | 豆花av| av不卡一区二区三区 | 小泽玛利亚一区二区三区在线观看 | 午夜黄色网址 | 激情视频网 | 中文字幕第6页 | 美女交配| 亚洲综合激情五月久久 | 中文字幕精品久久久久人妻红杏ⅰ | 玩弄丰满少妇xxxxx性多毛 | 国产精品熟女久久久久久 | 国产精品三级在线 | 国产精品传媒麻豆hd | 欧美交换国产一区内射 | 欧美综合网站 | 在线视频这里只有精品 | 怡红院成永久免费人全部视频 | 人妻少妇偷人精品无码 | 欧美人与禽性xxxxx杂性 | 国产免费av网站 | 香蕉视频2020 | 成人不卡av | 重口味av | 国产精品视频999 | 91九色国产ts另类人妖 | a级在线观看视频 | 午夜激情毛片 | 另类图片亚洲色图 | www色| 91pron在线 | 日日噜噜噜噜久久久精品毛片 | 日韩免费视频一区二区 | 漂亮人妻被中出中文字幕 | 岳睡了我中文字幕日本 | 欧美日韩成人精品 | 91视频综合 | 人妻丰满熟妇av无码区免 | 三级福利 | 亚洲最大的网站 | 日韩成人免费在线观看 |