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