1. 程式人生 > >C語言實現遞迴的快速排序

C語言實現遞迴的快速排序

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; }