排序 選擇排序(2)

2021-09-24 15:10:58 字數 1761 閱讀 2653

選擇排序(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.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排好陣列中的各元素。具體過程如...