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