快速排序算方法

快速排序算法的原理:
在待排序的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 } 
一颗平常心,踏踏实实,平静对待一切
原文地址:https://www.cnblogs.com/hanyuan/p/2731767.html