常見的幾種排序

2021-07-26 20:45:14 字數 2498 閱讀 7061

前言

最近聽公尺老師講了一遍排序,之前上課老師也講過,這次又聽了一遍,對排序有了更進一步的認識。接下來介紹一下最常見的幾種排序,以及自己對排序的理解。

插入排序

插入排序包括:直接插入排序與shell排序

1.直接插入排序

概念:通過線性搜尋來確定待插入記錄的位置

演算法:圖中每一行的資料表示插入了第i個記錄後的序列。實下畫線表示即將插入的第i+1個記錄,虛線下畫線表示第i個記錄插入後的新位置。箭頭連線從下乙個待插入元素位置指向最終插入位置。

直接插入排序演算法是穩定的,因為每次插入只與臨近記錄逐個比較,直到找到第乙個不大於新紀錄的值停止。

總結:直接插入排序是與

有序數列

比較排序

2.shell

排序與直接插入的不同:shell與直接插入排序不同的是,shell排序不是著眼於相鄰記錄之間的比較,而是對那些不相鄰的記錄進行比較和移動。

概念:shell排序通過分組進行排序,先將待排序序列分為若干個子串行,而且要保證子串行中的記錄在原始陣列中不相鄰,且間距相同,分別對這些子串行進行插入排序;然後減少記錄間的間距,減少小序列個數,將原始序列分為更大、更有序的子串行,分別進行插入排序;重複進行下去,直到最後間距減少為1(整個序列比較接近於正序狀態),然後對整個序列進行插入排序。

總結:不相鄰且間距相同,說白了就是高中學過的二分法,然後兩兩比較,最後變成一組有序數列。

選擇排序

選擇排序包括:直接選擇排序與堆排序

概念:演算法思想是逐個找出第i個小的記錄,並將這個記錄與陣列的第i個位置的記錄交換,第i小的記錄一次交換到位。

演算法:圖中每行表示第i次選擇(0≤i

直接選擇排序演算法是不穩定的:排序前,34在34'之前,34在第二輪就被交換到了陣列下標為6的位置。34'所處的下標為4,由於演算法是從前向後掃面,再第4輪(i=3)它先於34被選擇出來,因此排序的結果是(34',34),不穩定。

總結:從小到大排序,拿出無序中的第乙個數跟後的數比較,掃面出最小數,然後第乙個數跟最小數交換位置,依次類推,就好比生活中買水果,大家在選擇好壞水果的時候,其實就是利用的直接選擇排序。

概念:堆有兩種,最大堆和最小堆。接下來介紹的是最大堆的排序演算法。最大堆滿足以下條件:堆中的每個父結點中的資料項都要大於或等於其子結點中的資料項。因此,最大堆的堆頂記錄就是整個堆中的最大記錄。次大記錄則存放在堆頂的左或右子結點中,堆排序正是利用這一點來查詢剩餘記錄中的最大記錄。

演算法:例如,待排序陣列為,轉化為堆得陣列,如圖(a)將堆頂最大記錄78刪除到陣列末端後,序列變為,豎線後面的數字表示已排好序,待調整結構如圖(b),重新建堆後得到序列,如圖(c),再次減掉堆頂45,並從根節點向下調整為新堆,得到序列如圖(d)。類似重複直到堆為空。34,34',12,32|78},如圖(c),再次減掉堆頂45,並從根節點向下調整為新堆,得到序列如圖(d)。類似重複直到堆為空。

堆排序是不穩定的:因為在建堆過程中,二叉樹的父子結點之間的移動不能保證兩個重覆記錄一定保持原始輸入順序。例如圖(c)之後,第三個出堆得就是34,最終排序結果為,演算法不穩定。

總結:堆排序是在一堆數中找最大的放到樹根,次大的放到樹根下,然後把最大的刪掉,把次大的放到樹根,然後刪掉,依次類推,直至樹根為空,序就排好了。

先介紹到這,後邊會再寫一篇有關交換排序的,爭取下次**也能弄懂。

常見的幾種排序

常見的排序 選擇排序 直接選擇排序 堆排序 交換排序 氣泡排序 直接交換排序 插入排序 直接插入排序 shell排序 折半插入排序 歸併排序 基數排序 1.選擇排序 1.1直接選擇排序 選擇排序 直接選擇排序 每迴圈一次取出其中最大或者最小的乙個 插入到靠前或者靠後的位置 當然第一次從0開始,第二次...

幾種常見的排序

1 插入排序 for int i 1 i n i 2 氣泡排序 for int i 0 i n 1 i 3 選擇排序 for int i 0 i n 1 i swap array,i,lowindex 4 快速排序 void swap int a,int i,int j int partition ...

常見的幾種排序

一 氣泡排序 二 直接選擇排序 三 直接插入排序 四 希爾排序 五 快速排序 快速排序三種找基準方式及兩種優化 六 堆排 七 歸併排序 時間複雜性 一般平均是o n 2 最好的情況是o n 最壞的情況是o n 2 空間複雜性 o 1 穩定性 穩定排序。氣泡排序的原理 1 比較相鄰的元素。如果第乙個比...