成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

世界上最漂亮的排序算法!

開(kāi)發(fā) 開(kāi)發(fā)工具 算法
完美排序的排序證明,不在文章中展開(kāi)。從代碼直觀能感受到,通過(guò)swap和三次遞歸,趨勢(shì)上,小的元素會(huì)往前端走,大的元素會(huì)往后端走,直至完成排序。

[[248668]]

直奔主題,世界上“最漂亮”的排序算法。

  1. void stooge_sort(int arr[], int i, int j){ 
  2.          if (arr[i]>arr[j]) swap(arr[i], arr[j]); 
  3.          if (i+1>=j) return; 
  4.   
  5.          int k=(j-i+1)/3; 
  6.          stooge_sort(arr, i, j-k); 
  7.          stooge_sort(arr, i+k, j); 
  8.          stooge_sort(arr, i, j-k); 

《算法導(dǎo)論》習(xí)題中的“完美排序”,由Howard、Fine等幾個(gè)教授提出,之所以稱為“完美排序”,是因?yàn)槠浯a實(shí)現(xiàn),優(yōu)雅、工整、漂亮。

代碼不是很好理解,一步步講解下思路。

排序算法

首先,排序傳入的參數(shù)是待排序的數(shù)組arr[i, j];

第一步:比較i與j位置的元素,根據(jù)排序規(guī)則決定是否進(jìn)行置換。

畫(huà)外音:本栗子,假設(shè)排序規(guī)則是從小到大。

置換完成后,判斷排序是否結(jié)束,當(dāng)i和j相鄰時(shí),排序結(jié)束。

第二步:將arr[i, j]三等分;

畫(huà)外音:總元素個(gè)數(shù)是j-i+1。

第三步:遞歸arr的前2/3半?yún)^(qū)。

第四步:遞歸arr的后2/3半?yún)^(qū)。

第五步:遞歸arr的前2/3半?yún)^(qū)。

排序結(jié)束。

神奇不神奇!!!

再看一遍,印象深刻不?

  1. void stooge_sort(int arr[], int i, int j){ 
  2.          if (arr[i]>arr[j]) swap(arr[i], arr[j]); // 比較 
  3.          if (i+1>=j) return; // 是否結(jié)束 
  4.   
  5.          int k=(j-i+1)/3; // 三等分 
  6.          stooge_sort(arr, i, j-k); // 前2/3半?yún)^(qū) 
  7.          stooge_sort(arr, i+k, j); // 后2/3半?yún)^(qū) 
  8.          stooge_sort(arr, i, j-k); // 前2/3半?yún)^(qū) 

然并卵,除了代碼好看,完美排序毛用沒(méi)有,因?yàn)樗且粋€(gè)挺慢的算法。

由代碼很容易看出來(lái):

  • 當(dāng)只有1個(gè)元素時(shí),完美排序的時(shí)間也是1;
  • 當(dāng)有n個(gè)元素時(shí),完美排序由一個(gè)常數(shù)計(jì)算,加上三次遞歸,每次遞歸數(shù)據(jù)量為(2/3)*n;

即,其時(shí)間復(fù)雜度遞歸式為:

  • T(1) = 1;
  • T(n) = 3T(2/3n) + 1;

使用《搞定所有時(shí)間復(fù)雜度計(jì)算》中的遞歸式計(jì)算方法,最終得到,完美排序的時(shí)間復(fù)雜度是O(n^2.7),比O(n^2)的排序都要慢。

完美排序的排序證明,不在文章中展開(kāi)。從代碼直觀能感受到,通過(guò)swap和三次遞歸,趨勢(shì)上,小的元素會(huì)往前端走,大的元素會(huì)往后端走,直至完成排序。

畫(huà)外音:快速排序的過(guò)程是partition+兩次遞歸,也是小的元素往前端走,大的元素往后端走,直至完成排序。

希望這一分鐘,大家有收獲。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2021-11-30 14:06:37

排序算法代碼

2023-07-31 08:59:46

軟件FossilSQLite

2013-04-24 09:57:08

Excel微軟

2010-09-02 13:21:46

2013-06-09 08:52:50

哈希表

2025-03-27 00:45:00

2014-09-05 09:08:58

2025-03-13 00:35:00

2015-11-25 09:41:05

數(shù)據(jù)中心

2014-02-11 09:58:19

環(huán)保數(shù)據(jù)中心泰坦

2013-07-09 10:11:41

程序設(shè)計(jì)大賽程序員

2024-10-14 10:58:13

2024-01-11 09:11:08

數(shù)據(jù)庫(kù)SQLite管理

2025-01-09 11:10:15

2024-07-15 09:06:51

2013-05-08 09:38:28

InteropNetSDN網(wǎng)絡(luò)設(shè)備供應(yīng)商

2018-12-04 15:46:53

編程語(yǔ)言Python

2018-07-19 19:07:33

語(yǔ)言編程語(yǔ)言程序

2009-09-11 10:41:36

數(shù)據(jù)中心

2009-12-14 16:38:07

自主研發(fā)機(jī)器人
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人av在线播放 | 午夜综合 | 色综合久 | 精品国产一区三区 | 精品一二三区视频 | 九九久久久| 免费在线黄 | 性高湖久久久久久久久aaaaa | 天天干视频 | 午夜一区| 人人干天天干 | 精品久久久久久久 | 手机av在线 | 一区精品视频在线观看 | 亚洲免费久久久 | 亚洲一页 | 国产精品久久在线 | 精品国产伦一区二区三区观看说明 | 武道仙尊动漫在线观看 | 久久三级av| 日韩精品一区二区三区久久 | 欧美成年网站 | 日韩字幕| 亚洲一区二区在线 | 日本天天操 | 在线欧美小视频 | 亚洲福利 | 天天草天天爱 | 国产精品视频久久 | 成人av观看| 一区二区av | 欧美成人a∨高清免费观看 91伊人 | 一区二区中文 | 久久精品久久精品久久精品 | 亚洲综合大片69999 | 国产精品一区二区免费看 | 色一级 | 欧美日韩在线视频一区 | 亚洲综合日韩精品欧美综合区 | 91秦先生艺校小琴 | 日韩视频精品在线 |