天勤2019考研資料結構
附上**:
1void quicksort(int r,int low,int
high)
12if(i
1617
while(i//
從走往右查詢,沒有=號
18 ++i;19}
20if(i
2425
}26 r[i]=temp; //
應該r[i]= 和r[j]= temp都一樣,現在是i=j
27for(int u=0;u<8;++u)
3031 printf("
i=j:%d low:%d high:%d temp:%d
",i,low,high,temp);printf("\n"
);32
33 quicksort(r,low,i-1
);34 quicksort(r,i+1
,high);35}
36 }
int先說r的排序狀況:main()
;
int a[8]=;
quicksort(a,
0,7);
quicksort(r,0,7);
return 0
; }
r每一次遞迴呼叫quiklysort函式的結果(low
a的執行結果:
但書上說的a陣列每一次進行的陣列劃分是:
第一趟:10,18,25,12,29,58,51,47
第二趟:10,18,25,12,29,47,51,58
第三趟:10,12,18,25,29,47,51,58
所以書上並不是先把左遞迴進行到底再進行的右遞迴!而是在同一層對所有的子串行進行快排!
=》也就是說:這本書上手工快排和**快排的流程是不一樣的,但本質是一樣的,都是左右倆邊不斷遞迴,直到 i>=j ,而做題時不涉及到**的情況下用手工快排就好。
資料結構 考研 快速排序
快速排序有三種寫法,平均複雜度幾乎相同。我們這裡給出最常見的那種,把第乙個元素拎出來,然後找到它該去的地方再塞進去。快速排序和氣泡排序都屬於交換排序,都屬於不穩定排序。一趟快速排序定乙個位置,並且把區間分為兩部分。int partition int arr,int i,int j 小於基準值左移 正...
遞迴 快速排序 快速排序
問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...
排序 快速排序
快速排序時實踐中最快的一直排序,平均時間是0 nlogn 最壞的情況是o n2 但是很容易將這種情況避免 空間複雜度 o n lgn 不穩定。快速排序時基於分治模式處理的,對乙個典型子陣列a p.r 排序的分治過程為三個步驟 1.分解 a p.r 被劃分為倆個 可能空 的子陣列a p q 1 和a ...