直接插入排序:
整個序列分爲有序區和無序區,取第一個元素作爲初始有序區,然後第二個開始,依次插入到有序區的合適位置,直到排好序
void InsertSort(int arr[],int n){
//遍歷數組
for(int i=1;i<=n;i++){
//i-1是有序數組的長度,i是需要插入的元素
for(int j=i;j>0;j--){
if(arr[j]<arr[j-1]){
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}//將第i個元素和有序區最後一個比較,若小於,則往前插入
}
}
}
冒泡排序:比較相鄰的元素,如果反序則交換,也分有序區和無序區,初始時,有序區爲空,所有元素都在無序區,經過第一趟後能找出最大的元素,然後重複
Void BubbleSort(int arr[],int n){
//遍歷整個數組,注意i只能到n-2
for(int i=0;i<n-1;i++){
//除去前i次遍歷得到的最大值,i次遍歷得到一個最大值,在末尾
for(int j=0;j<n-1-i;j++){
//最大值交換到後面
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
快速排序:首先選取一個軸值(pivot,基準值),將待排序記錄劃分成獨立的兩部分,左軸的元素小於軸值,右側的大於,然後遞歸,直到整個序列有序
void Qsort(int a[], int low, int high)
{
if(low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];/*用字表的第一個記錄作爲樞軸*/
while(first < last)
{
while(first < last && a[last] >= key)
{
--last;
}
a[first] = a[last];/*將比第一個小的移到低端*/
while(first < last && a[first] <= key)
{
++first;
}
a[last] = a[first];
/*將比第一個大的移到高端*/
}
a[first] = key;/*樞軸記錄到位*/
Qsort(a, low, first-1);
Qsort(a, first+1, high);
}