直接排序也叫磁區交換排序
直接排序的思想:即在一個檔案中選擇一個值,則以這個值為中間值,比它大的放右邊,小的放左邊,此時可以找出所以比它大的值在右邊,比他小的值在左邊,此時再將比這個中間值小的再次排序一次 ,大的排序一次,顯然有遞回的思想在里面
- 快速排序中要知道起始位置與終止位置,上面所說的之間值可以檔案中的任意值,在這里還是設為起始位置
- 直到中間值之后就要開始比較大小由于中間值設定為起始位置,所以可以從終止位置開始比較,終止位置在后面,所以一定大于中間值,如果大于則比較終止位置的前一個直到小于中間值時,如果小于則應該放在中間值的前面
- 在遇到終止位置的值小于中間值之后,將這個值移到中間值的前面去,則此時開始比較起始位置的值,起始位置的值在前面,所以是小于中間值的,如果小于則起始位置就加一,向后移,當遇到大于中間值的時候則將這個值移到后面去
- 一直重復2與3的步驟,直到起始位置不小于終止位置時,則表明此時的左邊全是小于中間值的值,右邊全是大于中間值的值,此時可以遞回,在比中間值小的那一邊可以將終止位置設為中間值的位置減一,而比中間值大的一邊則將起始位置的值加一,一直遞回下去,直到起始位置不再小于終止位置時,則表明排序完成,
代碼如下:
void QuickSort(int arr[],int begin,int end){
int i,j,temp;
i = begin;
j = end;
temp = arr[i];
if(begin >= end){
return;
}
while(i<j){
while(i<j && temp < arr[j]){
j--;
}
if(i <j){
arr[i++] = arr[j];
}
while(i<j && temp >= arr[i]){
i++;
}
if(i < j){
arr[j--] = arr[i];
}
}
arr[i] = temp;
QuickSort(arr,begin,--j);
QuickSort(arr,++i,end);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/225420.html
標籤:其他
下一篇:VxWorks錯誤碼查找表
