本文整理我對快速排序的學習與理解。
時間複雜度好的情況下o(n*logn)最壞的情況下o(n*n)
對於一組序列 a = ;
1、選擇第乙個元素作為分界值temp,比temp大的數往右移,比temp小的數往左移,分為兩類
2、把temp移到中間,其左右兩個區間看做新的待排序的序列,重複第1步。
這是乙個遞迴過程,直到區間長度為1,return;
【**1(遞迴法)】:
#includeusing namespace std;
void qsort(int *a,int low,int high)//[low,high]閉區間
lnode,*linklist;
//帶有頭結點的單鏈表快速排序演算法
void lqsort(linklist h,linklist end)else
} lqsort(h,h->next);
lqsort(h->next,end);
}int main()
for(linklist p=head->next;p!=null;p=p->next)
printf("\n\n");
lqsort(head,null); //排序
for(linklist p=head->next;p!=null;p=p->next)
printf("\n\n");
}
詳談內部排序之快速排序
交換排序 兩兩比較待排序記錄的關鍵碼,如果發生逆序 即排列順序與排序後的次序正好相反 則交換之,直到所有記錄都排好序為止 交換排序的主要演算法有 1 氣泡排序 2 快速排序 快速排序基本思想 1 基本思想 通過一趟排序將待排序列以樞軸為標準劃分成兩部分,使其中一部分記錄的關鍵字均比另一部分小,再分別...
內部排序 交換類排序 快速排序
在氣泡排序中,由於掃瞄過程中只對相鄰的兩個元素進行比較,因此在互換兩個相鄰元素時只能消除乙個逆序,如果能通過兩個 不相鄰的 元素的交換,消除待排序記錄中的多個逆序則會大大加快排序的速度。快速排序方法中的一次交換可以消除多個逆序。演算法思想 從待排序記錄序列中選取乙個記錄 通常選取第乙個記錄 為樞軸,...
內部排序之堆排序
堆排序 heap sort 只需要乙個記錄大小的輔助空間,每個待排序的記錄僅占有乙個儲存空間。1 基本概念 a 堆 設有n個元素的序列 對所有的i 1,2,int n 2 當滿足下面關係 ki k2i,ki k2i 1 或 ki k2i,ki k2i 1 這樣的序列稱為堆。堆的兩種型別 根結點最小的...