C語言實現遞迴的快速排序
阿新 • • 發佈:2018-12-19
C語言實現遞迴的快速排序
目錄
文章目錄
原理
- 原理這裡就不多闡述了,主要就是使用頭尾兩個指標,對待排序陣列進行操作,遞迴的收斂返回條件是頭尾兩個指標重疊。注意這裡在操作指標的之後(特別是對指標進行加減運算之後),或者在指標傳入函式之前,必先檢查指標是否越界。越界之後將造成不可預估的輸出。
程式碼
#include<stdio.h>
#include<stdlib.h>
int sort (int * h, int *t)
{
int *tempt = t;
int *temph = h;
int temp = 0;
if (h==NULL||t==NULL) return 0;
else
{
if (h == t) return 0;
else
{
//判斷頭尾指標是否重合
while (tempt!=temph)
{
//方向h->t
if (*tempt<*temph)
{
temp = *tempt;
*tempt = *temph;
*temph = temp;
temph++ ;
//判斷頭尾指標是否重合
while (temph!=tempt)
{
//方向h<-t
if (*tempt<*temph)
{
temp = *tempt;
*tempt = *temph;
*temph = temp;
tempt--;
break;
}
else temph++;
}
}
else tempt--;
}
}
}
//注意這裡判斷指標是否越界
if (temph-1 >=h) sort(h, temph - 1);
if (tempt+1<=t) sort(temph + 1, t);
return 0;
}
int main()
{
int a[] = { 3,5,2,7,1,8,4,9,6,0 };
int len = sizeof(a) / sizeof(int);
if (!sort(&a[0], &a[len-1]))
for (int i = 0; i<len; i++) printf(" %d ", a[i]);
else printf("error\n");
printf("\n");
getchar();
return 0;
}