排序演算法總結及java實現

2021-09-23 22:04:31 字數 2928 閱讀 6998

十種排序演算法的基本特性:

排序演算法

平均時間複雜度

最好情況

最壞情況

空間複雜度

排序方式

穩定性快速排序

ο(nlogn)

ο(nlogn)

ο(n2)

ο(logn)

in-place

不穩定歸併排序

ο(nlogn)

ο(nlogn)

ο(nlogn)

ο(n)

out-place

穩定堆排序

ο(nlogn)

ο(nlogn)

ο(nlogn)

ο(1)

in-place

不穩定shell排序

ο(nlogn)

ο(nlog2n)

ο(nlog2n)

ο(1)

in-place

不穩定插入排序

ο(n2)

ο(n)

ο(n2)

ο(1)

in-place

穩定氣泡排序

ο(n2)

ο(n)

ο(n2)

ο(1)

in-place

穩定選擇排序

ο(n2)

ο(n2)

ο(n2)

ο(1)

in-place

不穩定計數排序

ο(n+k)

ο(n+k)

ο(n+k)

ο(k)

out-place

穩定桶排序

ο(n+k)

ο(n+k)

ο(n2)

ο(n+k)

out-place

穩定基數排序

ο(n*k)

ο(n*k)

ο(n*k)

ο(n+k)

out-place

穩定*穩定性:多個相同的值的相對位置在演算法結束時是否產生變動。

一、快速排序

實現:

//遞迴法

private

static

intquickone

(int data,

int left,

int right)

data[left]

=key;

return left;

}private

static

void

quicktwo

(int data,

int left,

int right)

public

static

void

quicksort1

(int data)

public

static

void

quicksort2

(int data)

if(mid+

1//右序列有兩個以上元素時,將右序列的首尾下標入隊

}}

二、歸併排序

三、堆排序

四、shell排序

實現:

public

static

void

shellsort

(int data)

} k--;}

}

五、插入排序

實現:

//普通插入排序

public

static

void

insertionsort

(int data)

data[j]

=t;}

}

//折半插入排序

public

static

void

binarysort

(int data)

else

if(data[mid]

< key) low = mid+1;

else

if(data[mid]

> key) high = mid-1;

}}high++

;for

(int k=i;k>high;k--

) data[k]

=data[k-1]

; data[high]

=key;

}}

//偽冒泡插入排序

public

static

void

insertionsort2

(int data)

else

break;}

}}

六、氣泡排序

實現:

public

static

void

bobsort

(int data)

} len--;}

}

七、選擇排序

實現:

//選擇排序

public

static

void

selectionsort

(int data)

}}}

排序演算法總結(java實現)

排序演算法的分類如下 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 冒泡泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 4.歸併排序 5.基數排序。關於排序方法的選擇 1 若n較小 如n 50 可採用直接插入或直接選擇排序。當記錄規模較小時,直接插入排序較好 否則因為直接選...

排序演算法實現及總結

1 氣泡排序 時間複雜度 最壞情況和平均情況 o n 最好情況 o n 屬於穩定排序 void bubble sort vector int nums if flag 0 break return 2 選擇排序 時間複雜度 最壞情況,最好情況,平均情況 o n 不是穩定排序 適用於資料量小的或有部分...

java實現的排序演算法總結

網上查了好多資料,不同排序演算法的實現可能有多種,但網上有一些放到 中無法執行,各種錯誤,並且有些並不是最優演算法,以下為本人整理的比較靠譜的 1 快速排序 public class quicksort i low j hight index a i 用子表的第乙個記錄做基準 while i j a...