常用演算法之排序演算法 選擇排序

2021-09-10 09:58:32 字數 1224 閱讀 4077

目錄

–直接選擇排序

–堆排序

•思想:每趟從待排序的記錄序列中選擇關鍵字最小的記錄放置到已排序表的最前位置,直到全部排完。

•關鍵問題:在剩餘的待排序記錄序列中找到最小關鍵碼記錄。

①簡單的選擇排序

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

2、例項

//簡單的選擇排序  

for (int i = 0; i < a.length; i++) ;  

int arraylength=a.length;    

//迴圈建堆    

for(int i=0;i//對data陣列從0到lastindex建大頂堆  

public static void buildmaxheap(int data, int lastindex){  

//從lastindex處節點(最後乙個節點)的父節點開始   

for(int i=(lastindex-1)/2;i>=0;i--){  

//k儲存正在判斷的節點   

int k=i;  

//如果當前k節點的子節點存在    

while(k*2+1<=lastindex){  

//k節點的左子節點的索引   

int biggerindex=2*k+1;  

//如果biggerindex小於lastindex,即biggerindex+1代表的k節點的右子節點存在  

if(biggerindex4、分析

堆排序也是一種不穩定的排序演算法。

堆排序優於簡單選擇排序的原因:

直接選擇排序中,為了從r[1..n]中選出關鍵字最小的記錄,必須進行n-1次比較,然後在r[2..n]中選出關鍵字最小的記錄,又需要做n-2次比較。事實上,後面的n-2次比較中,有許多比較可能在前面的n-1次比較中已經做過,但由於前一趟排序時未保留這些比較結果,所以後一趟排序時又重複執行了這些比較操作。

堆排序可通過樹形結構儲存部分比較結果,可減少比較次數。

堆排序的最壞時間複雜度為o(nlogn)。堆序的平均效能較接近於最壞效能。由於建初始堆所需的比較次數較多,所以堆排序不適宜於記錄數較少的檔案。

常用排序演算法之選擇排序

package com.dalingjia.interview.sort 選擇排序 每趟都找最小的數放在前面 首先在末排序列中找到最小的元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小的元素,然後放到已排序序列的末尾 public class selectionsort int...

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

最近在學習排序演算法,就排序演算法中的四大經典排序 氣泡排序 快速排序 選擇排序 插入排序。會出一系列的講解排序演算法的部落格。今天繼快速排序之後整理一下選擇排序。選擇排序,就是從一列未排序的陣列中先選出最小 最大 的數,放在陣列的第一位,第一位原來的數字放在最小的原來的位置,再選出第二小的數,放在...

常用排序演算法 選擇排序

選擇法排序 找出最小值,依次第乙個位置互換。例如陣列 33,6,5,59,12 第一次遍歷 找出最小值 12與陣列第乙個值33互換 第二次遍歷 找出除陣列第乙個值以外的剩下的最小值 5,與陣列第二個位置的值6互換 外部迴圈設定遍歷次數,陣列5個元素最多需要4次遍歷,因為每次決定陣列的乙個位置,最後乙...