排序演算法專題

2021-10-03 08:40:11 字數 3382 閱讀 4782

氣泡排序bubblesort

選擇排序selectionsort

插入排序insertsort

歸併排序mergesort

快速排序quicksort

堆排序heapsort

氣泡排序:相鄰元素兩兩比較,將通過比較得到的最大元素放在最後

選擇排序:總是選最小的元素放在當前有序序列的末尾,選n-1次

插入排序:插入有序序列的合適位置使其仍有序,插n-1次

歸併排序:一分為二,兩邊有序後再合併。具體為反覆一分為二,到乙個元素分不了了(乙個元素有序),再向上合併merge。典型的分治思想三部曲,分解子問題,求解子問題,合併子問題。遞迴邊界

快速排序:partition返回的樞軸在整體有序序列的下標,一次劃分partition後左邊元素都比以partion為下標的元素小,右邊元素都比它大,再對partion兩邊元素求解直到區間長度為1有序。分治思想,不需要合併子問題。

/*

氣泡排序

相鄰兩個元素比較,交換 */#

include

#include

using

namespace std;

void

bubblesort

(int a,

int n)}if

(true

== flag)

break;}

}int

main()

;bubblesort

(a, n)

;for

(int i=

0; i) cout<<<

" ";

return0;

}

/*

選擇排序,對陣列

排序函式形參為陣列,返回型別為void,陣列「傳位址」 */#

include

#include

using

namespace std;

void

selectionsort

(int a,

int n)

if(idx != i)

//這個判斷也可以去掉 }}

intmain()

;selectionsort

(a, n)

;for

(int i=

0; i) cout<<<

" ";

return0;

}

/*

插入排序

只需要對後n-1個數插入到前面指定位置

從後往前比較, */#

include

using

namespace std;

void

insertsort

(int a,

int n)

if(insertn != a[i]

)//未向後挪動,即當前不改變就是有序序列 //這個判斷也可以去掉

//a[j+1] = a[i]; 錯誤,可能已經被覆蓋,不再是原始序列的a[i]

a[j+1]

= insertn;}}

intmain()

;insertsort

(a, n)

;for

(int i=

0; i) cout<<<

" ";

return0;

}

/*

歸併排序

遞迴方式*/#

include

using

namespace std;

void

merge

(int a,

int l1,

int r1,

int l2,

int r2)

while

(i<=r1)

b[k++

]= a[i++];

while

(j<=r2)

b[k++

]= a[j++];

for(

int i=

0; i) a[l1+i]

= b[i];}

void

mergesort

(int a,

int left,

int right)

}int

main()

;int a[9]

=;mergesort

(a,0,8

);for(

int i=

0; i<

9; i++

) cout<<<

" ";

return0;

}

#

include

using

namespace std;

intpartition

(int a,

int left,

int right)

//此時left==right

a[left]

= pivot;

return left;

}void

quicksort

(int a,

int left,

int right)

}int

main()

;quicksort

(a,0,4

);for(

int i=

0; i<

5; i++

) cout<<<

" ";

return0;

}

#

include

using

namespace std;

void

adjust

(int a,

int k,

int len)}}

void

heapsort

(int a,

int len)

}int

main()

;heapsort

(a,5);

for(

int i=

1; i<

6; i++

) cout<<<

" ";

return0;

}

演算法 排序專題

快速排序 演算法導論版 version1 左邊第乙個元素為主元 include include includeusing namespace std int partition int a,int left,int right swap a i a left return i void swap i...

專題七 排序演算法

1 基本思想 每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在待排序的數列的最前,直到全部待排序的資料元素排完。2 排序過程 示例 初 始 關鍵字 49 38 65 97 76 13 27 49 第一趟排序後 13 38 65 97 76 49 27 49 第二趟排序後 13 27 ...

排序部分專題

各種排序思路總結 氣泡排序 1 外層迴圈將排序好的除去 2 內層迴圈將沒排好的陣列進行前後比較大小,每經過乙個迴圈,最大的數都在最後面 穩定排序,時間複雜度o n2 選擇排序 先找到第乙個數後的最小值,並將其與之交換 內層迴圈為找到最小值 不穩定,o n2 插入排序 1 外層迴圈是將排好續的陣列保留...