快速排序算法的原理:
在待排序的n个记录中任取一个记录(通常取第一个记录)为分区标准,把所有小于该排序码的记录移到左边,把所有大于该排序码的记录移到右边,中间放所选记录,称之为一趟排序;然后,对前后两个子序列分别重复上述过程。继续下去,知道所有记录都排好序。
算法:
头文件定义结构体:
1 #ifndef QUICK_SORT 2 #define QUCIK_SORT 1 3 struct SortObject { 4 int n; 5 int * element; 6 }; 7 #endif 8 9 typedef struct SortObject * QuickSortObject; 10 11 QuickSortObject createSortObject(int num) 12 { 13 QuickSortObject sort = NULL; 14 sort = (QuickSortObject) malloc(sizeof(struct SortObject)); 15 if(NULL != sort) 16 { 17 sort->element = (int *) malloc(sizeof(int) * num); 18 if(sort->element != NULL) 19 sort->n = 0; 20 else free(sort); 21 } 22 else 23 printf("OUT OF SPACE"); 24 return sort; 25 } 26 27 void quick_sort(QuickSortObject object, int begin, int end) 28 { 29 int i = 0, j = 0;//头尾游标 30 int temp = 0; //存放选中的中间值 31 32 if(begin >= end) 33 return; 34 i = begin; j = end; 35 temp = object->element[i]; 36 while(i != j) 37 { 38 while(i < j && object->element[j] >= temp) 39 j--; 40 if(i < j) 41 object->element[i++] = object->element[j]; 42 while(i < j && object->element[i] <= temp) 43 i++; 44 if(i < j) 45 object->element[j--] = object->element[i]; 46 47 } 48 49 object->element[i] = temp; 50 quick_sort(object, begin, i - 1); 51 quick_sort(object, i + 1, end); 52 }
第27到52行为快速排序的算法核心。
测试:
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "quick.h" 4 5 int main() 6 { 7 int num = 0, i = 0; 8 QuickSortObject quicksort = NULL; 9 10 num = 5; 11 quicksort = createSortObject(num); 12 13 printf("请输入要排序的序列:\n"); 14 for(i = 0; i < num; i++) 15 scanf("%d", &quicksort->element[i]); 16 17 quick_sort(quicksort, 0, num - 1); 18 19 for(i = 0; i < num; i++) 20 printf("%d ", quicksort->element[i]); 21 return 0; 22 }