快排 堆排序

2021-08-04 23:13:15 字數 733 閱讀 2235

快速排序主要運用了二分的思想,每次選擇乙個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。

void quicksort(int a, int l, int r)

if(ia[i] = a[j];

i++;

}while(ia[i] < temp)

if(ia[j] = a[i];

j--;}}

a[i] = temp;

quicksort(a, l, i - 1);

quicksort(a, i + 1, r);

}}

堆:完全二叉樹結構,以最大堆為例,所有節點的值均大於左右孩子節點的值,即a[i]>=a[i*2] && a[i]>=a[i*2+1]

堆排序:

1). 建立最大堆,堆頂元素為最大值。

2). 堆頂元素和最後乙個元素交換,調整剩下的元素為最大堆,交換堆頂元素與最後乙個元素,繼續調整……

void maxheapfixdown(int a, int i, int n)

if(temp>a[j])else

}a[i] = temp;

}void heapsort(int a, int n)

//排序

for(int i = n-1;i>=1;--i)

}

快排 堆排序

荷蘭國旗問題 經典快排 改進快排 隨機快排 堆結構 from左神演算法初級班第二節 問題一 給定乙個陣列arr,和乙個數num,請把小於等於num的數放在數 組的左邊,大於num的數放在陣列的右邊。要求額外空間複雜度o 1 時間複雜度o n 問題二 荷蘭國旗問題 給定乙個陣列arr,和乙個數num,...

排序介紹(選擇 冒泡 快排 堆排序)

問題描述 排序問題 給出一組數字,要求按照數值的大小進行排序 例如 這組資料進行公升序的排列後的順序為 氣泡排序 是一種簡單的排序演算法,它實現的過程 不斷重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作就是重複的進行,直到沒有再需要進行交換的的時候,就...

排序專題(桶排序,冒泡,快排,堆排序)

1.最簡單的排序 桶排序 簡化版 優點 快速,簡單 缺點 資料足夠大時,會造成嚴重的空間浪費 不能解決小數問題 理解 桶排序就是開乙個足夠大的陣列,陣列下標最大值 設為x,a x 要大於需要排序的資料最大值。設輸入為ni,則只要令a ni 就可以確定相同ni的個數,然後從從0到n,只要a ni 不為...