氣泡排序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 外層迴圈是將排好續的陣列保留...