選擇排序 直接選擇排序,堆排序

2021-08-08 16:17:39 字數 1501 閱讀 1590

選擇排序(selection sort)是一種簡單直觀的

排序演算法

。它的工作原理是每一次從待排序的

資料元素

中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法

1.簡單的選擇排序

基本思想:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止

2.堆排序

堆排序(heapsort)是指利用堆積樹(堆)這種

資料結構

所設計的一種

排序演算法

,它是選擇排序的一種。可以利用

陣列的特點快速定位指定索引的元素。堆分為大根堆和小根堆,是

完全二叉樹

。大根堆的要求是每個節點的值都不大於其父節點的值,即

a[parent[i]] >= a[i]。

在陣列的非降序排序中,需要使用的就是大根堆,因為根據大根堆的要求可知,最大的值一定在堆頂。

堆排序可以參考該鏈結

堆排序的實現總結來講,就是先建立乙個最大堆,根節點即array[0]為最大值,將這個值與最後乙個無序值array[lastindex]交換,交換之後無序值的長度為lastindex-2 而有序值長度為1。至此陣列被分為兩個部分,第乙個部分為需要不同進行堆調整並且縮小長度的無序組,另乙個部分為已經排好序的有序組。每一次無序組進行堆調整後,根節點(無序組最大值)被新增到有序組,有序組長度+1 無序組長度 -1

延續以上步驟,直到有序的長度為陣列總長度lastindex-1

其中,當根節點從0開始時,根節點i的左右子樹分別為2i+1;2i+2, 第i個結點的父結點為(i-1)/2

//根節點不是最大值時,將較大值賦給根節點

if(maxindex!=i)

}} private static void selectsort() {

// todo auto-generated method stub

for(int i=0;i

選擇排序 直接選擇排序 堆排序

1.基本思想 每一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完 在元素集合array i array n 1 中選擇關鍵碼最大 小 的資料元素 若它不是這組元素中的最後乙個 第乙個 元素,則將它與這組元素中的最後乙個 第乙個 元素交換 在剩餘...

選擇排序(直接選擇排序 堆排序)

選擇排序的基本方法 每次都從待排序物件中選出排序碼最大或最小的物件,依次排列,一共進行n 1次即可將n個物件排序完成。選擇排序的實施方案 1.直接選擇排序 2.堆排序 一 直接選擇排序 1.演算法 直接選擇排序 func selectsort data int if minindex i 2.時間複...

選擇排序(直接選擇 堆排序)

直接選擇排序 不穩定 排序過程 1 首先在所有資料中經過n 1次比較選出最小的數,把它與第1個資料交換,2 然後在其餘的資料內選出排序碼最小的數,與第2個資料交換.依次類推,直到所有資料排完為止。在第i 趟排序中選出最小關鍵字的資料,需要做n i次比較。複雜度 總的比較次數為 n n 1 2 o n...