簡單選擇排序,堆排序
阿新 • • 發佈:2019-01-13
簡單選擇排序
時間複雜度O(n^2)
空間 O(1)
void SelectSort(int *a){
for(int i = 1; i <= a[0]; i++){
int mindex = i;
for(int j = i+1; j <= a[0]; j++){
if(a[mindex] > a[j]){
mindex = j;
}
}
int temp = a[i];
a[i] = a[mindex];
a[mindex] = temp;
}
}
堆排序
時間複雜度 O(n*log n)以2 為底
空間 O(1)
適用於 1000000個數裡找 10個最大(小)的 ,速度快 ,如果資料量小,建議不要用
void Sift(int *a, int low, int high){ int i = low; int j = 2 * i; int temp = a[i]; while(j <= high){ if(j < high && a[j] < a[j+1]) j++; if(temp < a[j]) { a[i] = a[j]; i = j; j = 2 * i; } else break ; } a[i] = temp; } void heapSort(int *a){ //堆排序 for(int i = a[0]/2; i >= 1; i--) Sift(a, i, a[0]); for(int i = a[0]; i >= 2; --i){ int temp = a[1]; a[1] = a[i]; a[i] = temp; Sift(a, 1, i-1); } } int main() { int n; cout << "輸入無序陣列的個數 :" << endl; cin >> n; int *a = new int[n+1]; a[0] = n; for(int i = 1; i <= a[0] ; i++){ cin >> a[i]; } //堆排序 heapSort(a); for(int i = 1; i <= a[0]; i++){ cout << a[i] << " " ; } cout << endl; return 0; }