選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。
簡單選擇排序和堆排序
演算法思想
每次從待排序的記錄中選出鍵值最小(或最大)的記錄,順序放在已排序的記錄序列的最後,直到全部排完。
排序演示
實現**
演算法分析public static void selectsort(int a)
}
// 將最小元素放到本次迴圈的前端
int temp = a[i];
a[i] = a[minindex];
a[minindex] = temp;
}}//第二種
public static void sort(int array) ,經過排序後,前後兩個2的位置顛倒了。
用陣列實現的選擇排序是不穩定的,用鍊錶實現的選擇排序是穩定的。
不過,一般提到排序演算法時,大家往往會預設是陣列實現,所以選擇排序是不穩定的。
首先,選擇排序是不穩定的。在《演算法》第四版217頁上作者已經說了,有很多辦法可以將任意排序演算法變成穩定的,但是,往往需要額外的時間或者空間。
概念
堆排序(英語:heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。
大頂堆:每個節點的值都大於或等於其子節點的值,在堆排序演算法中用於公升序排列;
小頂堆:每個節點的值都小於或等於其子節點的值,在堆排序演算法中用於降序排列;
堆的操作
在堆的資料結構中,堆中的最大值總是位於根節點(在優先佇列中使用堆的話堆中的最小值位於根節點)。堆中定義以下幾種操作:
最大堆調整(max heapify):將堆的末端子節點作調整,使得子節點永遠小於父節點
建立最大堆(build max heap):將堆中的所有資料重新排序
堆排序(heapsort):移除位在第乙個資料的根節點,並做最大堆調整的遞迴運算
基本思想(大頂堆)
建立乙個堆 h[0……n-1];
把堆首(最大值)和堆尾互換;
把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;
重複步驟 2,直到堆的尺寸為 1。
實現**
public static void heapsort(int arr)
} private static void buildheap(int arr,int max)
}arr[j] = temp;//將temp值放到最終的位置
} }private static void swap(int arr,int last)
排序2 選擇排序 選擇排序 堆排序
選擇排序,依次找到資料集n n 1 n 2 中比它大 小的最大 最小者,最終達到全部資料有序。1 選擇排序 直接的依次找到資料集合n n 1 n 2.的最大 最小者形成排序,非常好理解。選擇排序可能是和氣泡排序一樣,最直觀能想到的排序方法。顯然選擇排序和氣泡排序一樣,無所謂最好 最壞 平均,選擇排序...
排序 2 選擇排序
工具方法類 package mydatastructrueadndalgorith.three.arrsort 陣列為模板排序演算法中的一些公用的模板方法 建立人 曹雪坤 version 1.0.0 public class example 遍歷陣列 public static void show ...
排序演算法2 選擇排序
選擇排序 selection sort 通過多次比較和交換來實現排序,其排序流程如下 1.選取陣列中最小的乙個元素和陣列的第乙個元素交換。2.接著從剩下的所有元素中選擇最小的與第二個元素交換。3.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排好陣列中的各元素。具體過程如...