關於快速排序的邏輯原理是這樣的:
將兩個指針i,j分別指向表的起始和最後的位置,T爲臨時變量。
反覆操作以下兩步:
(1)j逐漸減小,並逐次比較j指向的元素和目標元素的大小,若p(j)<T則交換位置。
(2)i逐漸增大,並逐次比較i指向的元素和目標元素的大小,若p(i)>T則交換位置。
直到i,j指向同一個值,循環結束。
下面是源碼
#include <stdio.h>
#include <stdlib.h>
void swap(int A[],int i,int j)
{
int temp=0;
if(A[i]>A[j])
{
temp=A[j];
A[j]=A[i];
A[i]=temp;
}
}
/* 快速排序 */
void quick_sort(int x[],int left, int right)
{
int temp = left;
int i;
if (left >= right)
return;
for (i = left+1; i<= right; i++)
{
if(x[i] < x[left])
swap(x, ++temp, i);
}
swap(x, left, temp);
quick_sort(x,left, temp-1);
quick_sort(x,temp+1, right);
}
int main()
{
int number[]={10,9,8,7,6,5,4,3,2,1};
int i=0,len;
printf("start ....\n");
len=(int)sizeof(number)/sizeof(*number);
printf("len =%d\n",len);
quick_sort(number,0,9);
for(i=0;i<10;i++)
{
printf("%d ",number[i] );
}
printf("\n");
printf("end ....\n");
exit(0);
}
代碼已經編譯調試過了,親測可行。