1. 程式人生 > >原地(原址、就地)排序和穩定排序

原地(原址、就地)排序和穩定排序

不瞭解這2個概念的同學可能會認為他倆之間有著某種一絲絲的聯絡,畢竟哲學上講過萬物都是聯絡的,但是我要說的是他們從科學概念上出發毫無聯絡。

上一講就講過穩定排序,是指在排序演算法中,相同值的兩個元素,在輸入陣列中先出現的數在輸出陣列中也先出現。像氣泡排序,插入排序,基數排序,歸併排序等都是穩定排序。

原地(原址、就地)排序是指:基本上不需要額外輔助的的空間,允許少量額外的輔助變數進行的排序。就是在原來的排序陣列中比較和交換的排序。像選擇排序,插入排序,希爾排序,快速排序,堆排序等都會有一項比較且交換操作(swap(i,j))的邏輯在其中,因此他們都是屬於原地(原址、就地)排序,而合併排序,計數排序,基數排序等不是原地排序。

出於倆概念混亂的目的,在此書之,以免忘記。

相關推薦

原地(原址就地)排序穩定排序

不瞭解這2個概念的同學可能會認為他倆之間有著某種一絲絲的聯絡,畢竟哲學上講過萬物都是聯絡的,但是我要說的是他們從科學概念上出發毫無聯絡。 上一講就講過穩定排序,是指在排序演算法中,相同值的兩個元素,在輸入陣列中先出現的數在輸出陣列中也先出現。像氣泡排序,插入排序,基數排序,

演算法穩定排序穩定排序排序排序時間複雜度空間複雜度

轉自:點選開啟連結 1、穩定排序和非穩定排序 簡單地說就是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序,我們就說這種排序方法是穩定的。反之,就是非穩定的。 比如:一組數排序前是a1,a2,a3,a4,a5,其中a2=a4,經過某種排序後為a1,a2,a4

Java 的冒泡排序直接選擇排序反轉排序方法

int sys nbsp arr i++ tostring ava ++ arrays 冒泡排序: System.out.println(Arrays.toString(arr)); int temp = -1; for(int i=0;i<arr.length;i+

(九)數據結構之簡單排序算法實現:冒泡排序插入排序選擇排序

html lan 獎章 tmx 4tb wot 數據結構 lec get d59FG8075P7伊http://www.zcool.com.cn/collection/ZMTg2NTU2NjQ=.html 312V畏蝗淤ZP哦睬http://www.zcool.com.c

插入排序合並排序排序快速排序

dom public and chang 大堆 第一個 復雜 快速排序 oid 1 * 插入排序 2 * 時間復雜度O(n2) 3 * @param array原地排序算法 4 */ 5 public void insertSort(int[] arr

排序算法下——桶排序計數排序基數排序

開始 http 數字 基於 分析 數據存儲 線性 尋找 排好序 桶排序、計數排序和基數排序這三種算法的時間復雜度都為 $O(n)$,因此,它們也被叫作線性排序(Linear Sort)。之所以能做到線性,是因為這三個算法是非基於比較的排序算法,都不涉及元素之間的比較操作。

排序(上):氣泡排序插入排序選擇排序

如何分析一個排序演算法? 分析一個排序演算法的三要素:排序演算法的執行效率、排序演算法的記憶體消耗以及排序演算法的穩定性。 排序演算法的執行效率 對於排序演算法執行效率的分析,一般是從以下三個方面來衡量: 最好情況、最壞情況、平均情況時間複雜度 時間複雜度的係數、常數、低階 比較次數和交

排序(上):冒泡排序插入排序選擇排序

最壞情況 選擇排序 main 評價 先後 序列 emp 復雜度 基本思想 如何分析一個排序算法? 分析一個排序算法的三要素:排序算法的執行效率、排序算法的內存消耗以及排序算法的穩定性。 排序算法的執行效率 對於排序算法執行效率的分析,一般是從以下三個方面來衡量: 最好情況

排序演算法下——桶排序計數排序基數排序

桶排序、計數排序和基數排序這三種演算法的時間複雜度都為 $O(n)$,因此,它們也被叫作線性排序(Linear Sort)。之所以能做到線性,是因為這三個演算法是非基於比較的排序演算法,都不涉及元素之間的比較操作。 1. 桶排序(Bucket Sort)? 1.1. 桶排序原理 桶排序,

排序演算法上——氣泡排序插入排序選擇排序

1. 排序演算法? 排序演算法應該算是我們最熟悉的演算法了,我們學的第一個演算法,可能就是排序演算法,而在實際應用中,排序演算法也經常會被用到,其重要作用不言而喻。 經典的排序演算法有:氣泡排序、插入排序、選擇排序、歸併排序、快速排序、計數排序、基數排序、桶排序。按

排序演算法總結-選擇排序插入排序歸併排序快速排序

  前言:   感覺好久沒寫部落格了,十月份的計劃是:要開始深入攻克資料結構和演算法,耽誤好久了,這都月末了,抓緊時間又學習了一波,趕緊來分享了一下,使用的語言是C++,最開始學資料結構一定要用C,掌握紮實之後,想學演算法,用C++比較好,C封裝沒有那麼好,寫起來沒有那麼容易了。   一、準備工作   

排序演算法:氣泡排序插入排序快速排序

筆試中經常有排序的演算法題,關於氣泡排序,這裡就不再細講了,具體方法很多種,直接上程式碼: //氣泡排序 (個人實現方法)         static void BubbleSort(int[] dataArray) {     &n

排序演算法(四)選擇排序 —— 簡單選擇排序 排序

1、簡單選擇排序簡單選擇排序思想是:從頭到尾(從後往前也行)遍歷序列,先固定第一個位置的資料,將該位置後面的資料,依次和這個位置的資料進行比較,如果比固定位置的資料大,就交換。這樣,進行一趟排序以後,第一個位置就是最小的數了。然後重複進行,第 2 次遍歷並且比較後,第二個位置

視覺化的排序二:氣泡排序雞尾酒排序快速排序

氣泡排序 氣泡排序的視覺化圖: 氣泡排序的概念:氣泡排序是一種交換排序,它的基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直至沒有反序的記錄為止。因為按照該演算法,每次比較會將當

常用內部排序演算法之四:簡單選擇排序直接插入排序氣泡排序

前言 之所以把這三類演算法放在一塊,是因為除此之外的演算法都是在這三類演算法的基礎上進行優化的。簡單選擇排序的思想是每一趟n−i+1(i=1,2,...,n−1)個記錄中選擇最小的記錄作為有序序列的第i個記錄。直接插入排序的思想是將一個記錄插入到已經排好序的有

經典排序演算法之桶排序氣泡排序選擇排序

1.桶排序      桶排序是將待排序的資料扔到按順序排列的桶裡,如下圖:                                             其中每個桶都有按順序的編號(桶就是陣列,編號是陣列的下標),將每個數放到編號與之對應的桶裡,然後再將桶裡的

Pandas四Grouping(分組)Sorting(排序)

讀入要測試的檔案。 import pandas as pd reviews = pd.read_csv("winemag-data-130k-v2.csv", index_col=0) reviews.head() 檢視部分資料: 1、找出資料集中最常見的。統計每個分組中指定列的

排序——選擇排序氣泡排序快速排序比較

一、選擇排序思路:1、以 int 型別為例2、拿第一個數與後面數相比較,如果比後面的數大則交換3、拿第二個數與後面的數比較,如果比後面的數大則交換4、直到比較到倒數第二個數,最後一個數不用比較5、兩個數比較可以用中間變數替換或者位運算6、利用位運算時需注意,如果兩個數相等則不能使用位運算7、函式程式碼如下:v

基數排序排序計數排序的區別

1.桶排序(Bucket Sort) 基本思路是:  將待排序元素劃分到不同的痛。先掃描一遍序列求出最大值 maxV 和最小值 minV ,設桶的個數為 k ,則把區間 [minV, maxV] 均勻劃分成 k 個區間,每個區間就是一個桶。將序列中的元素分配到各自的桶

資料結構(14)——插入排序交換排序選擇排序歸併排序基數排序演算法的比較

在排序過程中依據不同原則對內部排序方法進行分類,可大致分為插入排序、交換排序、選擇排序、歸併排序和基數排序等五類 插入排序 直接插入排序 直接插入排序市一中最簡單的排序方法,它的基本操作是將一個記錄插入到已排好序的有序表中,從而得到一