八大排序(2)

2021-10-04 22:59:44 字數 2655 閱讀 9657

氣泡排序

void

sort

(int

array)}if

(!ischarge)

}}

時間複雜度

空間複雜度

穩定性適合場景

o(n^2)

o(1)

穩定元素基本有序,數量較小

快排

遞迴從待排序區間選擇乙個數,作為基準值key;

partion: 遍歷整個待排序區間,將比基準值小的(可以包含相等的)放到基準值的左邊,將比基準值大的(可以包含相等的)放到基準值的右邊;

採用分治思想,對左右兩個小區間按照同樣的方式處理,直到小區間的長度 == 1,代表已經有序,或者小區間的長度 == 0,代表沒有資料。

void

quicksort

(int

arr,

int left,

int right)

else

}//三數取中

intgetindexofmiddle

(int

array,

int left,

int right)

else

if(array[mid]

>array[right]

)else

}else

else

if(array[mid]

)else}}

// hoare

intpartion

(int

arr,

int left,

int right)

while

(left>=arr[key])if

(left}swap

(arr,key,left)

;return left;

}//挖坑法

void

partion1

(int

arr,

int left,

int right)

arr[left]

=arr[right]

;while

(leftarr[right]

=arr[left];}

arr[left]

=key;

return left;

}int

partion2

(int

arr,

int left,

int right)

++cur;}if

(++prev!=right)

return prev;

}

非遞迴

void

quicksort

(int

array)

}}

時間複雜度

空間複雜度

穩定性適合場景

o(nlogn)

o(logn)

不穩定元素數量較大

歸併排序(merge-sort)是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

void

sort

(int

arr)

void

mergesort

(int

arr,

int start,

int end)

}void

merge

(int

arr,

int left,

int mid,

int right)

else

}while

(p1<=mid)

while

(p2<=right)

system.

arraycopy

(tmp,

0,arr,left,tmp.length)

;}

非遞迴

void

mergesort1

(int

arr)

if(right>=arr.length)

merge

(arr,left,mid,right);}

gap<<=1;

}}

時間複雜度

空間複雜度

穩定性適合場景

o(nlogn)

o(n)

不穩定元素數量較大

void

countsort

(int

array)

if(array[i]

}int range=max-min+1;

int[

] arraycount=

newint

[range]

;for

(int i =

0; i )int index=0;

for(

int i =

0; i }

八大排序演算法

1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void insertsort node l,int length void shell ...

八大排序演算法

一 概述 八大排序演算法包括 1 插入排序之直接插入排序 straight insertion sort 2 插入排序之希爾排序 shells sort 3 選擇排序之簡單選擇排序 selection sort 4 選擇排序之堆排序 heap sort 5 交換排序之氣泡排序 bubble sort...

八大排序演算法

排序的定義 輸入 n個數 a1,a2,a3,an 輸出 n個數的排列 a1 a2 a3 an 使得a1 a2 a3 an in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序...