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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

只有一重循环的排序——侏儒排序(Gnome Sort)

發(fā)布時間:2024/3/13 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 只有一重循环的排序——侏儒排序(Gnome Sort) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

侏儒排序:從頭(i=0)開始遍歷元素,如果當(dāng)前元素比前一個元素大(array[i]>array[i-1]),就把它跟前一個元素互換(Swap(a[i],a[i-1]))并繼續(xù)檢查它(i--),否則檢查下一個元素(i++)。當(dāng)i=length時結(jié)束排序。

? ? ? ? 該排序的神奇之處是只有一重循環(huán),而且代碼簡單。但是一重循環(huán)不代表時間復(fù)雜度更小,它的時間復(fù)雜度依然是O(n^2),原因就在于代碼里的i--起到了和二次循環(huán)相同的效果。

優(yōu)點:

1. 最好情況下時間復(fù)雜度低——O(n),一個循環(huán)跑下來始終i++,非常順利。

2. 排序穩(wěn)定,只交換相鄰元素的排序都是穩(wěn)定的。

3. 額外空間使用少,只需要i(記錄進度)和t(交換緩存)。如果比較元素是數(shù)字,t都能省掉(不使用臨時變量交換兩個數(shù)字)。

缺點:

效率低。我們對比侏儒排序和直接插入排序。會發(fā)現(xiàn)這二者的排序思想一模一樣,但是插入排序有2處優(yōu)化是侏儒排序沒做到的:

a. 插入排序遇到不匹配位置的新元素時,把前面的元素挨個后移,然后把新元素直接插入到合適位置(如果位置移動k位,則賦值k+1次)。而侏儒排序是把新元素逐個和前一個元素作交換,一路換位到合適位置,這是典型的冒泡做法(如果位置移動k位,則賦值3*k次)。

b. 當(dāng)一個元素好不容易從第10位冒泡到第1位的時候,那么此時前10位一定是有序序列。插入排序會直接從第11位繼續(xù)處理,而侏儒排序只能從第2位繼續(xù)處理,因為它不知道上個元素是從哪個位置走到第1位的,只好多走冤枉路。

下面是C#代碼:

void GnomeSort(List<int> a) {int i = 0;while (i < a.Count){if (i == 0 || a[i - 1] <= a[i]){i++;}else{int t = a[i];a[i] = a[i - 1];a[i - 1] = t;i--;}} }

? ? ? ? 當(dāng)然,我們可以通過打補丁的方式來優(yōu)化它,不過如果這么做了,我們干嘛不直接使用直接插入排序呢?作為直接插入排序的劣質(zhì)版,它基本上沒有實用價值,但是通過研究它,我們就能知道為什么直接插入排序能在這一眾O(n^2)排序中脫穎而出了。

轉(zhuǎn)載于:https://www.cnblogs.com/9-de/p/6600640.html

總結(jié)

以上是生活随笔為你收集整理的只有一重循环的排序——侏儒排序(Gnome Sort)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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