日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 99色综合网 | 视频1区| 在线观看你懂得 | 国产113页 | 日本不卡专区 | 久久精品免费电影 | 自拍日韩亚洲一区在线 | 午夜精品久久久久久久第一页按摩 | 精品国自产拍在线观看 | 6680新视觉电影免费观看 | 毛片a | 精品国产午夜福利 | bbbbbbbbb毛片大片按摩 | 久草美女| 亚洲精品乱码久久久久久蜜桃欧美 | 国产真实乱人偷精品视频 | av高清在线免费观看 | 国产性hd| 伊人色在线 | 狼人香蕉 | 久久久久久久久久久av | 成人在线免费播放 | 毛片黄片免费看 | 一本久久精品一区二区 | 内射中出日韩无国产剧情 | zzjizzji亚洲日本少妇 | 成人区人妻精品一区二 | 色老头综合 | 69性影院 | 91麻豆产精品久久久久久夏晴子 | av站 | 日韩av在线免费观看 | 色天天av | 国产伦精品一区二区三区免.费 | 干一干操一操 | 日韩精品免费一区二区三区 | 亚洲一区毛片 | 午夜精品一区二区三区免费视频 | 手机在线观看日韩av | 久久精品国产99精品国产亚洲性色 | 亚洲日b视频 | 欧美激情在线狂野欧美精品 | 一级片亚洲 | 国产精品久久久精品 | 黄色三级在线播放 | 日韩在线视频你懂的 | 欧美jjzz| 性xxx法国hd极品 | 国产伦理av | 国产v在线 | 麻豆系列在线观看 | 国产女主播在线播放 | 91精品亚洲一区 | 欧美日国产 | 人体写真 福利视频 | 激情五月婷婷网 | 亚洲欧美综合自拍 | 一级免费片 | 精品小视频在线观看 | 波多野结衣网站 | 欧美一区不卡 | 激情久久五月天 | 天天有av| 一级香蕉视频在线观看 | 激情综合网五月天 | 波多野结衣av一区二区全免费观看 | 黄视频在线免费看 | 日韩一区二区在线免费观看 | 亚洲人午夜精品 | 成人做爰69片免费看 | 91热在线| 欧美日韩国产不卡 | 成人区人妻精品一区二区不卡视频 | 国产极品在线播放 | 在线看片网址 | 成人a视频在线观看 | 91在线免费观看网站 | 精品少妇白浆小泬60P | 爱情岛论坛亚洲线路一 | 波多野结衣视频在线 | 色婷婷久 | 天堂伊人网 | 色网站在线看 | 亚洲精品乱码久久久久久蜜桃动漫 | www.蜜桃av.com| 黄色片网站国产 | 免费在线观看成人av | 在线www | 9l视频自拍蝌蚪9l视频成人 | 天天看毛片 | 久久精品无码一区二区三区毛片 | a天堂资源在线观看 | 五月激情六月 | 国产欧美一区二区三区精品酒店 | 三级黄色在线 | 久久久蜜桃一区二区 | 美女av免费 | 色一情一乱一伦 | www.香蕉网 |