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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法- C语言实现侏儒(地精)排序(Gnome_sort)

發布時間:2024/3/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法- C语言实现侏儒(地精)排序(Gnome_sort) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

引言

什么是侏儒排序(Gnome_sort)?

侏儒排序的排序原理:

演示侏儒排序的過程:

序列最開始的樣子:

第一趟排序:

第二趟排序:

第三趟排序:?

第四趟排序:?

第五趟排序:

第六趟排序:

第七趟排序:

第八趟排序:?

第九趟排序:

代碼實現:


引言

侏儒排序也叫地精排序,是我在一個算法可視化的視頻里非常巧合的遇到的一個有趣的算法,我感覺非常有意思,今天在地鐵上聽著歌沒事干,在手機備忘錄上對這個算法進行了試數:???????

排序原理已經基本清楚,這個算法個人認為是一個介于冒泡排序和插入排序之間的一個算法,因為這個算法的最初版本就是冒泡排序再冒回去,結果比較像插入排序,但是過程卻和冒泡排序十分的相似。當我們對這個算法進行優化,最后卻和插入排序幾乎一模一樣。廢話不多說,下面我們對這個算法進行詳細的介紹并用代碼實現。

什么是侏儒排序(Gnome_sort)?

Gnome_sort,是一個和插入排序算法類似,但是過程又和冒泡排序十分相像的算法,這個算法和插入排序相似在兩者都是將元素移動到合適的位置,并通過一系列交換完成。我覺得這個算法厲害在整個算法結構只有一層循環,在大部分數據都是有序的情況下,是可以在最大限度減少交換的回合數的。

侏儒排序的排序原理:

我們定義一個數組的指針?i?(i的默認值為1)和序列的長度len,通過 i 對整個序列進行遍歷。i的位置和大小在排序過程中是一直變化的,如果序列中相鄰的元素的大小關系不符合前小后大的關系,我們就要對元素的位置進行調換,并且如果發生元素的調換,i就要向后挪一位,也就是(i--)反之如果元素之間沒有發生調換,i就要一直往前走,也就是(i++)直到i下標不滿足i < len的條件時,排序已經完成,跳出循環并打印數組。

演示侏儒排序的過程:

我在這里給一個隨機數組:

int arr[] = {9,7,6,8,5,3,4,1,2,10};

為了更直觀的體現排序過程,我們在畫板上進行演示:

序列最開始的樣子:

第一趟排序:

?

i 的默認值為1,我們對9和7進行比較,我們發現9 > 7不滿足升序序列的條件,所以我們將9和7的位置進行調換,i--此時i的值為0

第二趟排序:

此時再次對比,指針i向后遷移一位到達7的位置,我們比較指針i所指的元素和它的后一位元素,7 < 9,所以i++,指針此時指向元素9,我們比較9和6,9 > 6,所以我們調換元素9和元素6的位置,i--,現在i指向元素7,但是調換了元素9和元素6之后,6是小于7的,于是我們進行第二次調換,調換元素6和元素7,i--,再次向后移一位,序列中發生了兩次調換,現在i的值為0:

第三趟排序:?

此時i++,我們發現i = 1,i = 2,都是滿足條件的,直到i = 3時我們對9和8進行對比,已不滿足條件,此時我們對元素9和元素8進行位置調換,同時i的值減1,此時i指向元素7:

第四趟排序:?

同理,當我們的指針i指向元素9時不滿足條件,我們對元素9和它后面的元素5進行位置調換,同時我們發現5是小于前面每一個數的,所以我們將元素5挪到最前面并將所有的值向后遷移一位,那么每發生一次調換i的值就減一,所以i的值此時也變成0:

第五趟排序:

指針i繼續向后遷移,直到i= 5時,9和3不滿足規律,同樣元素3小于前面的每一個元素,于是我們再次一步一步地進行調換,i的值也隨著調換次數的增長而減小,將元素3換到最前面的時候,i的值也就變為了0:

第六趟排序:

?同理,當i = 6時,9和4不再滿足規律,同時我們發現4小于前面除了元素3以外的任何元素,于是我們一步一步地將元素4調換至元素3的后面,此時i指向元素3:

第七趟排序:

同上,i = 7時,9 > 1,我們發現1小于前面的任何一個元素,于是我們一步一步的進行調換,直到將元素1放在序列的最前面:此時i = 0:

第八趟排序:?

同上,i = 8時,9和2不滿足條件,于是我們將9和2進行調換,2小于前面除了元素1的任何一個數,于是我們將2放到1元素的后面,3元素的前面,此時i指向元素1:

第九趟排序:

我們此時比較i指向的元素1和它后面的元素2,滿足規律,i++,比較2和它后面的元素3,滿足規律,i++,比較3和它后面的元素,滿足規律,直到i = 9依然滿足規律,i++,i的值為10,此時已經不滿足i < len的限定條件,說明此時已經序列已經排好序,我們此時跳出循環,并打印數據。

排序過程演示完成,我們下面嘗試用代碼實現侏儒排序:

代碼實現:

#define MAXSIZE 11 #include<stdio.h> #include<iostream> #include<stdlib.h> #include<assert.h> #include<time.h> void initar(int *ar,int len) {assert(ar != nullptr);for(int i = 0;i < len;i++){ar[i] = rand() % 30;} } void showar(int *ar,int len) {assert(ar != nullptr);for(int i = 0;i < len;i++){printf("%d ",ar[i]);}printf("\n--------------------------\n"); } void swap(int *ar,int index1,int index2) {int temp = ar[index1];ar[index1] = ar[index2];ar[index2] = temp; } void Gnome_sort(int *ar,int len)//侏儒排序算法 {assert(ar != nullptr && len >= 0);int i = 0;while(i < len){if(i == 0 || ar[i - 1] <= ar[i])i++;else{swap(ar,i,i - 1);i--;}} } int main() {srand((unsigned int)time(NULL));int ar[MAXSIZE];initar(ar,MAXSIZE);printf("原始數據為:\n");showar(ar,MAXSIZE);printf("\n經過侏儒排序后的數據為:\n");Gnome_sort(ar,MAXSIZE);showar(ar,MAXSIZE); }

運行結果:

如圖,成功的對系統隨機生成的11個數進行了排序。?

后續我還會對侏儒排序算法的優化進行補充。

總結

以上是生活随笔為你收集整理的算法- C语言实现侏儒(地精)排序(Gnome_sort)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美三级欧美成人高清 | 亚洲激情影院 | 玖草在线观看 | 欧美国产综合视频 | 用舌头去添高潮无码视频 | 95国产精品 | 51啪影院 | a级欧美 | 免费看一级黄色大全 | 在线免费观看黄色网址 | 丁香花电影高清在线阅读免费 | 国产麻豆91 | 制服丝袜快播 | 婷婷第四色 | 99riav国产精品视频 | caoprom在线视频 | 精品久久久久久久久久久久久 | 亚洲国产中文字幕在线 | 青青免费视频 | 黄瓜视频在线观看 | 亚洲av无码一区二区三区dv | 超级砰砰砰97免费观看最新一期 | 久久中文字 | 91一区二区 | 中国黄色一级片 | 中文字幕一区二区三区四区欧美 | 超碰精品在线 | 国产稀缺真实呦乱在线 | 欧美视频免费看欧美视频 | 台湾少妇xxxx做受 | 色欧美88888久久久久久影院 | 色姑娘久 | 热热热av | 久久久天堂国产精品女人 | 欧美动态视频 | 欧美v视频| 久草国产在线观看 | 国产精品欧美综合亚洲 | 日本一区二区三区四区五区 | 波多野一区二区三区 | 久操网在线 | 久久首页| 久久精品1| 激情丁香网 | 久伊人| 懂色中文一区二区在线播放 | 麻豆视频免费在线 | 岛国片在线免费观看 | 免费裸体美女网站 | 成人aaaa| 日本在线视频不卡 | 久久久久久久亚洲 | 免费在线观看黄网 | 中文人妻一区二区三区 | 天天插天天摸 | 日韩一区二区三区精品 | 女同另类之国产女同 | 婷婷午夜精品久久久久久性色av | 91av欧美| 扒开jk护士狂揉免费 | av电影一区二区三区 | wwwa级片| 伊人网站在线观看 | 九色av| 日韩最新av | 色吧综合网 | 国外成人性视频免费 | 日韩精品三级 | 中文字幕――色哟哟 | 三级三级久久三级久久18 | 亚洲逼逼 | 女人的洗澡毛片毛多 | 可以直接观看的av | 一二区免费视频 | 国产三级自拍视频 | 中国女人特级毛片 | 久久中文字幕无码 | 日韩永久免费视频 | 美女网站免费黄 | 日韩av女优在线观看 | 在线视频你懂得 | 啪啪免费网址 | 黄色片久久久久 | 国产喷白浆一区二区三区 | 青青草久久伊人 | 欧美激情综合网 | 麻豆一区二区三区在线观看 | 黄网址在线观看 | 久久久网 | 香蕉一区二区三区四区 | 日日夜夜av| 国产大片中文字幕在线观看 | 天堂成人av | 最新欧美大片 | av永久免费网站 | 国产性猛交╳xxx乱大交一区 | 好紧好爽再浪一点视频 | 色妹子综合 | 日韩欧美中文字幕一区二区三区 |