快排
#include#include#include#includeusing namespace std;
void quicksort(vector&a,int l,int r)
// 終止遞迴的條件,子串行長度為1
int mid = low + (high - low)/2; // 取得序列中間的元素
mergesort(arr,low,mid); // 對左半邊遞迴
mergesort(arr,mid+1,high); // 對右半邊遞迴
merge(arr,low,mid,high); // 合併
}void merge(int arr,int low,int mid,int high)
while(i<=mid)//若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中
temp[k++]=arr[i++];
while(j<=high)//同上
temp[k++]=arr[j++];
for(i=low,k=0;i<=high;i++,k++)//將排好序的存回arr中low到high這區間
arr[i]=temp[k];
delete temp;//釋放記憶體,由於指向的是陣列,必須用delete
}};int main() ;
int n=8;
for (size_t i = 0; i < n; i++) cout << endl;
solution so;
so.mergesort(a,0,n-1);
for (size_t i = 0; i < n; i++) cout << endl;
return 0;
}
堆排
#includetypedef int elementtype;
int arr1[11]=;
void swap(int* a,int* b)
void percdown(int a, int i, int n)
a[i] = tmp;
}void heapsort(int a, int n)
}void print(int a,int n)
}int main()
; print(arr,10);
printf("\n");
heapsort(arr,10);
print(arr,10);
printf("\n");
return 0;
}
排序總結 快排 歸併 堆排
1.煞筆快排 假設我們對陣列進行快速排序。首先在這個序列中找乙個數作為基準數,為了方便可以取第乙個數。遍歷陣列,將小於基準數的放置於基準數左邊,大於基準數的放置於基準數右邊。此時得到類似於這種排序的陣列。在初始狀態下7是第乙個位置,現在需要把7挪到中間的某個位置k,也即k位置是兩邊數的分界點。那如何...
快排和堆排
一 快速排序 最常用的排序演算法,速度通常也是最快的。時間複雜度 o nlogn 最壞 o n 2 空間複雜度 o nlgn 不穩定 比如 5 3 3 4 3 8 9 10 11 這個序列,在中樞元素5和3交換就會把元素3的穩定性打亂 實現原理 快排主要是通過選擇乙個關鍵值作為基準值。比基準值小的都...
快排與堆排
本文複習一下快速排序和堆排序 2 種排序演算法 為了多快好省地刷 leetcode 主要思想 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。時間複...