排序演算法之 選擇排序 二)樹形選擇排序

2021-09-09 08:20:13 字數 799 閱讀 7669

簡介

樹形排序也被稱為錦標賽排序

步驟

1、把n個物件的排序碼進行兩兩比較,得到n/2個排序的優勝者,作為第一步比較的結果留下來

2、然後對這n/2個物件再進行排序碼的兩兩比較,…,如此重複,直到選出乙個排序碼最小的物件為止。

3、構建一顆包含n個結點的完全二叉樹,當二叉樹不滿(葉子結點個數為奇數),用關鍵字為∞的結點填滿,選出的最小關鍵字就是這棵樹的根節點。在輸出了最小關鍵字之後,為了選擇次小關鍵字,把最小關鍵字的葉子節點置為∞。

4、繼續將葉子結點和其兄弟節點的關鍵字比較,修改從該葉子節點到根節點上各結點的值,則根節點的值被修改為次小的關鍵字,直到左右的結點輸出為止。

**

void treeselectsort(int *a,int len)

if(len%2==1)

int treesize = 2 * len - 1; //完全二叉樹的節點數

int low = 1;

int tree[treesize+1];//臨時的樹儲存空間

//由後向前填充此樹,索引從1開始 ,這樣在之後給父節點賦值的時候,就不需要分左右節點了

for(int i = len,j=0 ;i >= 1; --i,j++)

for(int i = treesize+1;i>1;i-=2)

}

}

}

樹形選擇排序演算法

樹形選擇排序有時也稱為錦標賽排序。排序過程中,按照錦標賽比賽規則進行,將所有n個資料看成一棵完全二叉樹的葉子結點,首先,完全二叉樹的葉子結點兩兩比較,勝出的兄弟進入樹的上一層繼續和兄弟進行比較,如果某個葉子結點沒有兄弟,則直接進入上一層,一直到二叉樹的第二層的兩個兄弟節點進行比較,勝出者為第一名。為...

排序演算法之選擇排序 選擇排序 堆排序

直接選擇排序 如下 下面 是一次迴圈同時挑選出最大和最小數,並將其與左右交換 選擇排序 void selectionsort int a,int len swap a min a left 如果最大數的下標在為left,證明要交換的最大數已經被 換到min小標所表示的位置,只需要將right和min...

(三)排序演算法之選擇排序

選擇排序和之前說的氣泡排序和插入排序套路差不多,都是將陣列分隔為已排序和未排序子陣列,主要區別在於元素選取和放入。選擇排序是從未排序陣列中選最小 或最大 的乙個放入已排序的陣列後。下面用 分隔已排序和未排序陣列,如 待排序資料 7,0,2,8,1 一開始有序陣列是空的 一次排序 0 7,2,8,1 ...