1. 程式人生 > >7 種常用的排序演算法直觀感受

7 種常用的排序演算法直觀感受

1. 快速排序

介紹:

快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部迴圈(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的資料,可以決定設計的選擇,減少所需時間的二次方項之可能性。

步驟:

從數列中挑出一個元素,稱為 “基準”(pivot),
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。
遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

排序效果:
這裡寫圖片描述

2. 歸併排序

介紹:

歸併排序(Merge sort,臺灣譯作:合併排序)是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用

步驟:

申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列
設定兩個指標,最初位置分別為兩個已經排序序列的起始位置
比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置
重複步驟3直到某一指標達到序列尾
將另一序列剩下的所有元素直接複製到合併序列尾

排序效果:
這裡寫圖片描述

3. 堆排序

介紹:

堆積排序(Heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆是一個近似完全二叉樹的結構,並同時滿足堆性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。

步驟:

(比較複雜,自己上網查吧)

排序效果:
這裡寫圖片描述

4. 選擇排序

介紹:

選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。以此類推,直到所有元素均排序完畢。

排序效果:
這裡寫圖片描述

5. 氣泡排序

介紹:

氣泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。

步驟:

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

排序效果:
這裡寫圖片描述

6. 插入排序

介紹:

插入排序(Insertion Sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

步驟:

從第一個元素開始,該元素可以認為已經被排序
取出下一個元素,在已經排序的元素序列中從後向前掃描
如果該元素(已排序)大於新元素,將該元素移到下一位置
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
將新元素插入到該位置中
重複步驟2

排序效果:

(暫無)

7. 希爾排序

介紹:

希爾排序,也稱遞減增量排序演算法,是插入排序的一種高速而穩定的改進版本。

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:

1、插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率

2、但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位>

排序效果:
這裡寫圖片描述

回頭有時間把每一種演算法的程式碼實現也給放上去就完美了,歡迎各位查詢bug,提出自己的見解!

相關推薦

7 常用排序演算法直觀感受

1. 快速排序 介紹: 快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的

Java常用排序演算法

目錄: 1.直接插入排序 2.希爾排序 3.簡單選擇排序 4.堆排序 5.氣泡排序 6.快速排序 7.歸併排序 8.基數排序   1. 直接插入排序 經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。 將第一個數和第二個數排序,然後構成一個有序序列 將第三個數插

常用排序演算法(Java)

01演算法分類 02時間複雜度 03相關概念 穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面。 不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面。 時間複雜度:對排序資料的總的操作次數。反映當n變化時,操作次數呈現什麼規律。

常用排序演算法的思路和複雜度對比

1、插入排序——直接插入排序、希爾排序 (1)直接插入排序思路:從第1號元素開始,每個元素依次與前面的元素做比較,小的排前面,這樣當比較到最後一 個元 素完即完成排序。 (2)希爾排序思路:     

7經典排序演算法Java程式碼實現(冒泡+選擇+插入+歸併+快排+堆排序+希爾)

氣泡排序 氣泡排序的原理是:比較兩個相鄰的元素,將值較大的元素交換到至右端(比較+移動) public static void sortMpao(int[] num) {     for(int i = 1; i < num.length; i++) {

常用排序演算法總結

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法,氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 冒泡法:  這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡:  複雜度為O(n*n)。當資料為正序,將不會有交換。複雜度為

常用排序演算法(冒泡、選擇、快速)的Java實現

       學習Java有一陣子了,現在還處於比較初級的水平,能夠把簡單的程式寫對就不錯了,更不用談現在能夠拿Java做什麼了。        學完了兩段網路視訊課程,接下來找本書簡單看看。只要有了一個初步的認識,接下來的東西應該可以更加順利一些。學習程式設計最好的方法就

java實現四常用排序演算法

四種常用排序演算法 ##注:從小到大排 ##氣泡排序## 特點:效率低,實現簡單 思想:每一趟將待排序序列中最大元素移到最後,剩下的為新的待排序序列,重複上述步驟直到排完所有元素。這只是氣泡排序的一種,

JAVA 4常用排序演算法,總是記不住,記錄下來,免得以後番網頁

public class ArraySort { public static void main(String[] args) { int[] array=getArray(); selectSort(array); //insertSort(array);

7常見排序演算法的c++實現

今天心血來潮複習了一下基本的排序演算法,實現了一下,就順便發上來咯。。在程式碼裡做了註釋了-。-也就不多說了,直接上程式碼吧。。// order_algorithm.cpp: 定義控制檯應用程式的入口點。 //author: netbin #include "stdafx.

7基本排序演算法--java實現

7種基本排序演算法有:直接插入排序、希爾排序;直接選擇排序、堆排序;氣泡排序、快速排序;歸併排序。實現如下:import java.util.Arrays; public class SortAlogrithm { public static void main(St

用 Java 實現的八常用排序演算法

> 八種排序演算法可以按照如圖分類 ![](https://img2020.cnblogs.com/blog/1759254/202010/1759254-20201013141619825-490940992.png) ## 交換排序 所謂交換,就是序列中任意兩個元素進行比較,根據比較結果來交

視覺直觀感受 7 常用排序演算法

1. 快速排序 介紹: 快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部迴圈

java面試重點-java基礎 常用排序演算法(4)

氣泡排序 寫法: public static void bubbleSort(int[] arr) { if (arr

常用排序算法 (一)

實現 void 交換 完成 快速 並排 元素 [] log 八大常用排序算法詳細分析 包括復雜度: 排序有可以分為以下幾類: (1)、交換排序:冒泡排序、快速排序 (2)、選擇排序:直接選擇排序、堆排序 (3)、插入排序:直接插入排序、希爾排序 (4)、歸並排序 (5)、

php實現7常見排序

tar AI eap continue nds UNC reat pub HP class test{ public function main() { $data = $this->createData(); $th

7常見排序算法

算法 元素 歸並排序 最後一個元素 中間 刪除 二叉 節點 個數 1. 冒泡排序從第一個元素開始與右側元素兩兩比較並交換,直到右側成為有序部分。 2. 選擇排序有序部分在左側,在剩余元素中找到最小的那個元素,並與剩余元素中第一個元素交換。 3. 插入排序有序部分在左側,將剩

總結4常用排序(快排、選擇排序、冒泡排序、插入排序)

快速排序 length 長度 遞歸 繼續 index 效率 第一個元素 自己 一、 選擇排序 概念理解: 在一個長度為3的數組中,在第一趟遍歷3個數據,找出其中最小的數值與第一個元素交換; 第二趟遍歷2個數據,找出其中最小的元素與第一個數交換(註意:這裏的第一個數是指遍歷

Java 常用排序演算法總結

氣泡排序:  /*冒泡演算法*/ public class BubbleSort { public static void bubble_sort(int[] arr){ int temp; for(int i = 0; i < arr

常用排序演算法的時間複雜度和空間複雜度及特點

一、常用排序演算法的時間複雜度和空間複雜度表格 二、特點 1.歸併排序: (1)n大時好,歸併比較佔用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。 (2)歸併排序每次遞迴都要用到一個輔助表,長度與待排序的表長度相同,雖然遞迴次數是O(log2n),但每次