快排 歸併 堆排

2021-10-08 10:25:53 字數 1288 閱讀 5411

快排

#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 主要思想 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。時間複...