3 #include 4 #include 5void swap(int &a, int &b)611
1213
//選擇排序:交換移動次數少,o(n2)
14void selectsort(int a,int n)//
或者int *a
1528
}29 swap(a[i], a[index]); //
//這裡一開始錯寫成了swap(a[i], minint);這就不是陣列裡面的交換了.所以要用個index.
30for (int k = 0; k < n; k++)
3134 printf("\n"
);35}36
}3738//
插入排序:
39void insertsort(int a, int n) //
按照寶典編的.(有交換的機制)
4055
// else
56// //這裡的break是必須的,否則j會一直自減.
59// }
60// a[j + 1] = temp; //因為for迴圈j--.即使沒有執行迴圈體,但是j = i-1是一定執行過了.所以無論執行迴圈體,都能妥善處理.
61*/
6263
64//
(2)寫法2(較簡便)
65for (j = i - 1; j >= 0 && temp < a[j]; j--)
6669 a[j + 1] = temp; ///
/因為for迴圈j--.即使沒有執行迴圈體,但是j = i-1是一定執行過了.所以無論執行迴圈體,都能妥善處理.可以拿排好的順序驗證.70}
71}7273
//氣泡排序
74void bubblesort(int a, int
n)7589}
90}91*/
9293
//(2)冒泡形式
94for (i = 0; i < n - 1; i++)
95102
}103
}104
}105
106//
希爾排序
107void shellsort(int a, int
n)108
123else
124break; //
也可以寫成插入排序的(2)
125}
126 a[j + h] =temp;
127}
128}
129}
130131
132//
堆排序(採用weiss的**)
133#define leftchild(i) (2 * (i) + 1)
134void percdown(int a, int i, int
n)135
145if (temp 146149
else
150153
}154 a[i] = temp; //
此處的i是child賦值過來的
155}
156157
void heapsort(int a, int
n)158
165for (i = n-1; i > 0; i--)//
i > 0因為沒有必要和自身交換
166170
}171
172173
//歸併排序
174175
176int
main()
177;
179int len = sizeof(a) / sizeof(a[0]);//
也可以寫作:int len = sizeof(a) / sizeof(int);
182//
selectsort(a, len);
183//
insertsort(a, len);
184//
bubblesort(a, len);
185//
shellsort(a, len);
186heapsort(a, len);
187 clockend =clock();
188for (int i = 0; i < len; i++)
189193
return0;
194 }
常見的排序演算法
一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...
常見的排序演算法
需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...
常見的排序演算法
排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...