堆排序-不新建數組

//排序數組生成堆的方法

? void createPile(List sortArray, int childIndex)

? {

? ? int child = childIndex;

? ? int parent = (child-1) ~/ 2;

? ? while (child > 0) {

? ? ? if (sortArray[child] > sortArray[parent]) {

? ? ? ? int replaceObject = sortArray[child];

? ? ? ? sortArray[child] = sortArray[parent];

? ? ? ? sortArray[parent] = replaceObject;

? ? ? ? child = parent;

? ? ? ? parent = (child-1) ~/ 2;

? ? ? }else

? ? ? {

? ? ? ? break;

? ? ? }

? ? }

? }

? //刪除堆定元素后從新創(chuàng)建堆的方法

? void sortPile(List sortArray, int totalSize, int rootIndex){

? ? int parent = rootIndex;

? ? int child = parent*2+1;//左孩子的下標

? ? //如果孩子節(jié)點下標大于父節(jié)點的录别,說明已經不滿足條件了色解,已經成堆了

? ? while (child < totalSize) {

? ? ? //選出左右孩子中最小的那個

? ? ? if ((child + 1 < totalSize) && (sortArray[child+1] > sortArray[child])) {

? ? ? ? child ++;

? ? ? }

? ? ? //如果最小的孩子比父節(jié)點的小,需要交換位置

? ? ? if (sortArray[child] > sortArray[parent]) {

? ? ? ? int replaceObject = sortArray[child];

? ? ? ? sortArray[child] = sortArray[parent];

? ? ? ? sortArray[parent] = replaceObject;

? ? ? ? parent = child;//父節(jié)點交換到了孩子節(jié)點

? ? ? ? child = parent*2+1;//計算新的孩子節(jié)點

? ? ? }else

? ? ? {

? ? ? ? //不滿足的話就跳出循環(huán)

? ? ? ? break;

? ? ? }

? ? }

? }

//待排序數組

? ? ? ? ? var sortArray = [1,2,5,1000,500,200,49,100,50,40,30,20];

? ? ? ? ? //打印待排序數組

? ? ? ? ? print(sortArray);

? ? ? ? ? for (var i = 0; i < sortArray.length; i++) {

? ? ? ? ? ? createPile(sortArray, i);//創(chuàng)建大頂堆

? ? ? ? ? }

? ? ? ? ? for (var i = 0; i < sortArray.length; i++) {

//把堆的第一個元素和最后一個元素交換位置,堆頂的最大元素放到了最后邊

? ? ? ? ? ? int replaceObject = sortArray[0];

? ? ? ? ? ? int lastIndex = sortArray.length-1-i;

? ? ? ? ? ? sortArray[0] = sortArray[lastIndex];

? ? ? ? ? ? sortArray[lastIndex] = replaceObject;

//從新建大頂堆

? ? ? ? ? ? sortPile(sortArray, sortArray.length-i-1, 0);

? ? ? ? ? }

? ? ? ? ? print("排完序的數組${sortArray}");

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末咐汞,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子吵血,更是在濱河造成了極大的恐慌攘宙,老刑警劉巖坦弟,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異裆操,居然都是意外死亡怒详,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門踪区,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昆烁,“玉大人,你說我怎么就攤上這事缎岗【材幔” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵传泊,是天一觀的道長鼠渺。 經常有香客問我,道長眷细,這世上最難降的妖魔是什么拦盹? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮溪椎,結果婚禮上普舆,老公的妹妹穿的比我還像新娘。我一直安慰自己校读,他們只是感情好沼侣,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著歉秫,像睡著了一般蛾洛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上端考,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天雅潭,我揣著相機與錄音揭厚,去河邊找鬼。 笑死扶供,一個胖子當著我的面吹牛筛圆,可吹牛的內容都是我干的。 我是一名探鬼主播椿浓,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼太援,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扳碍?” 一聲冷哼從身側響起提岔,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笋敞,沒想到半個月后碱蒙,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡夯巷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年赛惩,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁餐。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡喷兼,死狀恐怖,靈堂內的尸體忽然破棺而出后雷,到底是詐尸還是另有隱情季惯,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布臀突,位于F島的核電站勉抓,受9級特大地震影響,放射性物質發(fā)生泄漏惧辈。R本人自食惡果不足惜琳状,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盒齿。 院中可真熱鬧,春花似錦困食、人聲如沸边翁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽符匾。三九已至,卻和暖如春瘩例,著一層夾襖步出監(jiān)牢的瞬間啊胶,已是汗流浹背甸各。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焰坪,地道東北人趣倾。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像某饰,于是被迫代替她去往敵國和親儒恋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容