排序演算法 所有常見排序方法

2021-10-19 08:58:33 字數 1998 閱讀 8620

氣泡排序

void

bubblesort

(int

arr)}}

}

選擇排序
void

selectsort

(int

arr)}}

}

插入排序
void

insertsort

(int arr)

}}}

希爾排序

關鍵思想

void

shellsort

(int

arr)}}

}}

歸併排序

遞迴的終止

每次 return 都返回乙個新陣列

歸併過程的三個索引

int

mergesort

(int

arr)

private

int[

]merge

(int

arr ,

int l ,

int r);}

int mid =

(l + r)/2

;int

larr =

merge

(arr , l , mid)

;int

rarr =

merge

(arr , mid +

1, r)

;int

res =

newint

[r - l +1]

;for

(int i =

0, lindex =

0, rindex =

0; i < r - l +

1; i ++

)else

}return res;

}

快排

三個索引

終止條件

void

quicksort

(int

arr)

private

static

void

_quicksort

(int

arr ,

int l ,

int r)

int target = arr[l]

;int lidx = l +

1, ridx = r;

// 因為要讓兩個元素的也能進入,所以終止條件取 =,即:

// lidx 最終代表的 >= target 的

// ridx 是 < target 的或者是起始位置下乙個

while

(lidx <= ridx)

if(lidx > ridx)

else

} lidx ++;}

arrutil.

swap

(arr , l , ridx)

;_quicksort

(arr , l , ridx -1)

;_quicksort

(arr , ridx +

1, r)

;}

堆排序

兩個步驟

對大堆進行調整

void

heapsort

(int

arr)

}// 用大堆實現從小到大排序

for(

int i = arr.length -

1; i >

1; i --

)else

if(rchildidx ==0)

else

arrutil.

swap

(arr , newparentidx , parent)

; parent = newparentidx;}}

}

計數排序 思想

常見排序演算法 選擇排序演算法

原理 1.選擇排序需要定義三個變數,i表示外層迴圈即for i 0 i 2.當i 0時,min初始值為i,此時min 0。內層迴圈j i 1開始到length 1處結束。當j 1時,比較a j 與a min 如果a j a min 則記錄最小值索引即min j。即if a j a min 當j 1時...

常見排序演算法 堆排序演算法

基本思想 先將待排序資料化為完全二叉樹,從length 2 1處開始尋找他的左 右子節點,將較大值與父節點進行交換,最後遍歷到根節點處,此時根節點為所有數中的最大值,將該值與最後乙個元素進行交換,length length 1,又從父節點開始進行比較,繼續尋找較大值。將找到的較大值與length 2...

常見排序演算法 shell排序

shell排序是對插入排序的乙個改裝,它每次排序把序列的元素按照某個增量分成幾個子串行,對這幾個子串行進行插入排序,然後不斷的縮小增量擴大每個子串行的元素數量,直到增量為一的時候子串行就和原先的待排列序列一樣了,此時只需要做少量的比較和移動就可以完成對序列的排序了。1 2 default to so...