幾種常見的排序方法整理

2021-10-14 05:40:47 字數 2762 閱讀 7940

幾種常見的排序方法整理

一、直接插入排序

插入排序是一種簡單直觀的排序演算法。通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

演算法:將需要排序的數列看成乙個陣列,i初始化指向陣列1號下標,j初始化指向陣列0號下標,和i對應數值進行比較,比較一次往後退一步,如果j對應數值大於i對應數值,數值進行交換,直到i前面的數字都比它小,i往後走。

時間複雜度:(1)最壞情況是o(n^2)

(2) 最好情況是有序情況:o(n)

空間複雜度:o(1)

穩定性:穩定

**:

public static void insertsort(int array)else

}array[j+1] = tmp; //不用換,放回原位

}}

二、希爾排序

希爾排序也是插入排序的一種,它是採用分組的思想,對每組進行插入排序。

**:

public static void shellsort(int array);

for(int i = 0; i=0; j-=gap)else

}array[j+gap]=tmp;

}}

三、選擇排序

演算法思想:

先從陣列第乙個數字開始,把這個數字和這個數字之後的所有數字進行比較,如果比這個數字小就交換,然後把陣列第二個數字和它之後的所有數字進行比較,比他小就交換,以此類推,直到陣列最後乙個數字。

**:

public static void selectsort(int array)

} //建立大根堆

public static void creatheap(int array)

}//向下調整法

public static void adjustdown(int array,int root,int len)else

}}

時間複雜度:o(nlogn)

空間複雜度:o(1)

穩定性:不穩定

五、氣泡排序

氣泡排序是每一趟都從第乙個數字開始,將陣列每乙個數字和它後乙個數字進行比較,比它小就交換。如此往復,直到序列有序。

**:

public static void bublesort(int array)}}

}

時間複雜度:o(n^2)

空間複雜度:o(1)

穩定性:不穩定

六、快速排序

快速排序,又稱劃分交換排序。通過一趟排序將要排序的資料分割成兩部分,然後再按此方法對兩部分資料分別進行快速排序,以此達到整個資料變成有序序列

步驟為:

(1) 從數列找出乙個元素,稱為「基準」。

(2) 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面。在這個分割槽結束之後,該基準就處於數列的中間位置。這個稱為分割槽操作。

(3)把基準元素左邊的數值串行用遞迴的方法進行快速排序,右邊序列也如此。直到整個序列有序。

**:public static void quicksort(int array)

public static void quick(int array,int left,int right)

int par = partition(array,left,right);

//遞迴排序左邊和右邊

quick(array,left,par-1);

quick(array,par+1,right);

}//找基準

public static int partition(int array,int left,int right)

array[left]=array[right];

while(left時間複雜度:o(nlogn)

最壞情況:1 2 3 4 5 6 7 8 9 / 9 8 7 6 5 4 3 2 1 :o(n^2)

空間複雜度:o(logn)~o(n)

穩定性:不穩定

七、歸併排序

歸併排序是採用分治法,思想就是先將陣列分解為乙個乙個的數(將陣列從中間一分為二,然後遞迴分解左邊和右邊),再合併陣列。

合併的基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指向就往後移一位。然後比較,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。

**:public static void mergesort(int array)

//分解

public static void mergesortin(int array,int low,int high)

//分解(從陣列中間一分為二,直至分解為乙個乙個的數)

int mid = (low+high)>>>1; //右移相當於除2

mergesortin(array,low,mid);

mergesortin(array,mid+1,high);

//歸併(將乙個乙個的數按序歸併)

merge(array,low,mid,high);

} //歸併

public static void merge(int array,int low,int mid,int high)else

}while (s1<=mid)

while (s2<=high)

for(int j= 0; j時間複雜度:nlogn

空間複雜度:o(n)

穩定性:穩定

幾種常見的排序方法。

氣泡排序 氣泡排序是每次都從第乙個元素開始,到最後的k 每迴圈完一次,最後乙個元素位置固定。include include int main void for i 0 i n 1 i k for i 0 i n i return 0 選擇排序 選擇排序每一次迴圈玩從正數的第i個元素位置確定。incl...

幾種常見的排序方法

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。以4,2,3,1為例,第一次迴圈4與2比較...

常見排序方法整理

建立乙個用於運算元組的工具類,其中包含著常見的對陣列的操作函式如 排序,最值等 author jepson version v1.0 public class arraytool 對給定的整數陣列進行直接插入排序 param arr 接收乙個元素型別為int的整數陣列 public static v...