排序演算法之 快速排序(五)

2021-07-15 02:08:12 字數 2205 閱讀 9891

#include

#include

#include

#define len 10

void show(int

str,int length);

void quick_sort(int

str,int length);

void quick_sort(int

str,int left,int right);

using namespace std;

void show(int

str,int length)

}void quick_sort(int

str,int left,int right)

if(i str[i++] = str[j];

}while(i str[i] <= value )

if(i < j)

}str[i] = value;

quick_sort(str,left,i - 1);

quick_sort(str,i+1,right);

}}void quick_sort(int

str,int length)

int main()

printf("排序前:\n");

show(str,len);

printf("\n");

printf("排序後:\n");

quick_sort(str,len);

show(str,len);

return0;}

排序前:

416734069

2478

5862

64排序後:

0243441

5862

6467

6978press any key to continue

程式解讀:

4167340

6924

7858

6264

1.挖空位 value = str[left]

i = left ; j = right

2.j-- 由後向前找比他小的數,找到之後挖出此數填在前乙個

坑中str[i]

3 . i++ 由前向後找比他大的數,找到後,也將它填在前乙個坑中

str[j]

4 .再重複 2

3 步 ,直至 i == j ,將基數填在str[i]

5,進行分治演算法

遞迴呼叫:

quick(str ,left,i-1);

quick_sort(str,i+1,right)

可以看出,經過一次後,基數前的都比它小,基數後的都比它大

416734069

2478

5862

641 .value str[0] = 41

__ 67340

6924

7858

6264ij

2.j-- 找比41 小的數 24 ----> 下標 5

將 str[0] = str[5] = 24 str[5]形成新的空位

i++;

246734

069 __ 78

586264i

j3.i++ 找比41 大的數 67 -----> 下標 1

將 str[5] = str[1] = 67 str[1] 形成新坑

j--24 __ 34069

6778

586264i

j4j-- 找比41 小的數 0 ----> 下標 3

將 str[1] = str[3] = 0 str[3] 形成新坑

i++24

034 __ 69

6778

586264i

j5.i++ 找比41 大的數 while(i == j)

退出 將基數填入坑中240

34 **41** 69

6778

5862

64

可見 基數前的都比它小,基數後的都比它大

最後進行分治演算法

遞迴呼叫:

quick(str ,left,i-1);

quick_sort(str,i+1,right)

演算法五之快速排序

一 快速排序 quicksort 思想 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對...

演算法五之快速排序

一 快速排序 quicksort 思想 設要排序的陣列是a 0 a n 1 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。值得注意的是,快速排序不是一種穩定的排序演算法,也就是說,多個相同的值的相對...

排序演算法(五) 快速排序

在陣列中選取乙個數作為基準值,進行乙個partition過程,將小於該數的放在左邊,大於的放在右邊,等於的放在中間,再對左右分別進行該操作。時間複雜度 每次partition可以將乙個數字位置確定,將陣列劃分為兩部分,因此想要有序,理想情況每次剛好兩邊大小一樣,則一共需要logn次partition...