考研 快速排序

2022-03-05 01:00:14 字數 1249 閱讀 8880

天勤2019考研資料結構

附上**:

1

void 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

main()

;

int a[8]=;

quicksort(a,

0,7);

quicksort(r,0,7);

return 0

; }

先說r的排序狀況:

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 ...