1. 程式人生 > >各種排序的時間複雜度和空間複雜度,穩定性

各種排序的時間複雜度和空間複雜度,穩定性

直接插入排序

就是把未排序的元素一個一個插入到有序的集合中

public static void insertionSort(int []arr){
for(int i=1;i<arr.length;i++){
   insertToRightPosition(arr,i);
}
}
private static void insertToRightPosition(int []arr,int i){
int inserted=arr[i];
int j =i-1;
for(;j>=0&&arr[j]>inserted;j--){
arr[j+1]=arr[j];
}
arr[j+1]=inserted;
}

i指向待插元素,j會遍歷有序陣列中所有元素,直到找到合適的位置將待插元素插入

選擇排序

選擇排序就是不斷地從未排序的元素中選擇最大(最小)的元素放入已排好序的元素集合中,直到未排序中僅剩一個元素

private static void selectSort(int []arr){
for(int i=0;i<arr.length-1;i++){
//i下標左邊是已拍好序的元素,右邊(包括i)是無序區間
//最小值下標預設是無序區間第一個元素下標
int minIndex=i;
//找到最小值
for(int j=i+1;j<arr.length;j++){
    if(arr[j]<arr[minIndex]){
      minIndex=j;
    }
}
swap(arr,minIndex,i);
}
}

氣泡排序

第一趟比較下來,把最大(最小)的元素交換到最後一個

private static void BubbleSort(int []arr){
int temp=0;
for(int i=0;i<arr.length-1;i++){//一共n-1趟
   for(int j = 0;j<arr.length-1-i;j++){//第i+1趟時,需要比較arr.length-1-i次
    if(arr[j]>arr[j+1]){
     temp=arr[j];
     arr[j]=arr[j+1];
     arr[j+1]=temp;
     }
}
}
}

相關推薦

各種排序時間複雜空間複雜穩定性

直接插入排序 就是把未排序的元素一個一個插入到有序的集合中 public static void insertionSort(int []arr){ for(int i=1;i<arr.length;i++){ insertToRightPosit

資料結構(排序演算法查詢演算法的時間複雜空間複雜

這是從大神給多的網站上找到的演算法的時間複雜度趨勢和各個常用結構的複雜度截圖。     演算法的時間複雜度,用來度量演算法的執行時間,記作: T(n) = O(f(n))。它表示隨著 輸入大小n 的增大,演算法執行需要的時間的增長速度可以用 f(n) 來描

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

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

常用排序演算法中的時間複雜空間複雜

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 不穩定

排序演算法之 插入排序、希爾(shell)排序 及其時間複雜空間複雜

        有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序,這個時候就要用到一種新的排序方法——插入排序插入排序的基本操作就是將一個數據插入到已經排好序的有序資料中,從而得到一個新的、個數加一的有序資料,演算法適用於少

常見排序演算法及對應的時間複雜空間複雜

轉載請註明出處: 排序演算法經過了很長時間的演變,產生了很多種不同的方法。對於初學者來說,對它們進行整理便於理解記憶顯得很重要。每種演算法都有它特定的使用場合,很難通用。因此,我們很有必要對所有常見的排序演算法進行歸納。 排序大的分類可以分為兩種:內

演算法穩定排序非穩定排序、內排序排序時間複雜空間複雜

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

排序演算法之 歸併排序 及其時間複雜空間複雜

        在排序演算法中快速排序的效率是非常高的,但是還有種排序演算法的效率可以與之媲美,那就是歸併排序;歸併排序和快速排序有那麼點異曲同工之妙,快速排序:是先把陣列粗略的排序成兩個子陣列,然後遞迴再粗略分兩個子陣列,直到子數組裡面只有一個元素,那麼就自然排好序了,可

排序演算法之 基數排序 及其時間複雜空間複雜

        基數排序(radix sort)屬於“分配式排序”(distribution sort),又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達到排序的作用,基數排序法是屬於穩定

排序演算法的時間複雜空間複雜-----總結

演算法的時間複雜度是指:演算法執行過程中所需要的基本運算次數。 常見的演算法時間複雜度由小到大依次為:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)。其中O(1)表示基本語句的執行次數是一個常數,一般來說,

常用的八大排序演算法時間複雜空間複雜比較

    排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。     各種內部排序按所採用的

常用的排序演算法的時間複雜空間複雜

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 穩定 O(1) 二叉樹排序 O(n2) O(n*log2

排序時間複雜空間複雜總結

排序方法 平均時間複雜度 最好 最差 空間複雜度 穩定度 氣泡排序 o(n^2) o(n) o(n^2) o(1) 穩定 選擇排序 o(n^2)

排序演算法之 選擇排序 及其時間複雜空間複雜

        選擇排序(Selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法(比如序列[5, 5, 3]第一次就將第

排序演算法之 氣泡排序 及其時間複雜空間複雜

        氣泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因

常用的排序/查詢演算法的時間複雜空間複雜

常用的排序演算法的時間複雜度和空間複雜度 排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 插入排序 O(n2) O(n2) 穩定 O(1) 選擇排序

排序演算法之 堆排序 及其時間複雜空間複雜

        堆排序是由1991年的計算機先驅獎獲得者、斯坦福大學計算機科學系教授羅伯特.弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同發明了的一種排序演算法( Heap Sort );         堆排序(Heapsort

快速排序 及其時間複雜空間複雜

 快速排序是排序演算法中效率相對較高的,但使用的人卻是比較少,大家一般信手拈來的排序演算法就是氣泡排序。因為氣泡排序主觀,容易理解,而快速排序使用到了遞迴,大家可能就有點不知所措了。 演算法分析         快速排序由C. A. R. Hoare在1962年提出。

快速排序時間複雜空間複雜

最近沒有寫快速排序演算法,就轉了一下這個程式碼 快速排序演算法在陣列中選擇一個稱為主元(pivot)的元素,將陣列分為兩部分,使得 第一部分中的所有元素都小於或等於主元,而第二部分的所有元素都大於主元。對第一部分遞迴地應用快速排序演算法,然後對第二部分遞迴地應

常用幾種排序演算法的時間複雜空間複雜

 常用的排序演算法的時間複雜度和空間複雜度 排序法  最差時間分析 平均時間複雜度  穩定度  空間複雜度  氣泡排序 O(n2) O(n2)  穩定  O(