快速排序是一種交換排序,是對冒泡排序的改進
利用冒泡排序的特性,對目標進行分段冒泡
#include "stdio.h"
int a[6];//定義一個數組,長度爲6,實際存放5個元素,
/**
* 快速排序函數
* @param left 最左邊的指針
* @param right 最右邊的指針
*/
void QuickSort(int left,int right){
int i,j,t,temp;
//如果左指針在右指針的右邊,說明這趟快排結束
if(left>right){
return;
}
//最右邊的元素作爲樞紐
temp = a[left];
//取出left和right的下標給i,j
i = left;j = right;
/**
* 主要循環
*/
while(i!=j)
{
//移動左指針,一直找到a[j]<=temp
while(i<j && a[j]>=temp){
j--;
}
//移動右指針,一直找到a[i]>=temp
while(i<j && a[i]<= temp){
i++;
}
//交換這兩個找到的元素,讓他們符合 比樞紐大的在數組右邊,比樞紐小的在數組左邊 的原則
if(i<j){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//把a[i]作爲最左邊的指針
a[left] = a[i];
//把a[i]作爲樞紐元素
a[i] = temp;
//快排左邊的序列
QuickSort(left,i-1);
//快排右邊的序列
QuickSort(i+i,right);
}
int main( )
{
int i,j;
for(i = 1;i<=5 ;i++)
{
scanf("%d",&a[i]);
}
QuickSort(1,5);
for (j = 1; j<=5 ; j++) {
printf("%d ",a[j]);
}
return 0;
}