1、演算法描述
快速排序也是基於分治模式的,下面是乙個典型子陣列a[p..r]排序的分治過程,主要分為三個步驟:
(1)分解:將陣列a[p..r]劃分成兩個子陣列a[p...q-1]和a[q+1...r],使得前乙個陣列中每個值都小於等於a[q],後乙個陣列每個值都大於a[q],下標q也在這個分解過程中求得。
(2)解決:通過遞迴呼叫對兩個子陣列分別進行排序。
(3)合併:兩個子陣列是就地進行排序的,所以他們的合併並不需要操作,這個陣列已經有序了。。
2、具體實現:
形參和實參的區別:
(1)實現一:
view code
1 #include2(2)實現二:int partition(int *ptr,int p,int r)//
一次劃分過程316
}17 i++;
18 temp=*(ptr+i-1
);19 *(ptr+i-1)=*(ptr+r-1
);20 *(ptr+r-1)=temp;
21return
(i);22}
23void quicksort(int *ptr,int p,int r)//
遞迴排序
2432}33
void
main()34;
36 quicksort(a,1,8
);37
for(int i=0;i<8;i++)
38 printf("
%d
",a[i]);
39 }
view code
1 #include2int partition(int ptr,int p,int r)//
一次劃分過程316
}17 i++;
18 temp=ptr[i-1
];19 ptr[i-1]=ptr[r-1
];20 ptr[r-1]=temp;
21return
(i);22}
23void quicksort(int ptr,int p,int r)//
遞迴排序
2432}33
void
main()34;
36 quicksort(a,1,8
);37
for(int i=0;i<8;i++)
38 printf("
%d
",a[i]);
39 }
演算法導論 第7章 快速排序
一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,排序最快,也只能達到o nlgn 二 快速排序演算法的描述 ...
《演算法導論》筆記 第7章 快速排序
第7章 快速排序 像合併排序一樣,快速排序也是基於分治模式的。下面對乙個典型的子陣列a p r 排序的分治過程的三個步驟 分解 陣列a p r 被劃分成兩個 可能空 的子陣列a p q 1 和a q 1 r 使得a p q 1 中的每個元素都小於等於a q a q 1 r 中的每個元素都大於等於a ...
《演算法導論》筆記 第7章 7 4快速排序分析
利用randomized partition,快速排序演算法期望的執行時間當元素值不同時,為o nlgn 7.4 1 證明 在遞迴式 中,t n n 2 採用代換法。猜測 t n c n 2,c為某個常數。選擇足夠大的c,使得 c 2 n 1 可以支配 n t n c n 2成立。7.4 2 證明 ...