7.3交换排序

7.3.1冒泡排序

7.3.2快速排序

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 #define N 7
 5 
 6 void print(int *arr, int n);//打印数组
 7 int Partition(int *arr, int i, int j);//做一次划分排序
 8 void QuickSort(int *arr, int low, int high);//对顺序表中的子区间进行快速排序
 9 
10 void main()
11 {
12     int arr[N] = { 5,2,6,8,4,3,7 };
13 
14     printf("排序前
");
15     print(arr, N);//打印数组
16     printf("
");
17     
18     QuickSort(arr, 0, N - 1);//对顺序表中的子区间进行快速排序
19 
20     printf("排序后
");
21     print(arr, N);//打印数组
22 
23     system("pause");
24 }
25 
26 void print(int *arr, int n)//打印数组
27 {
28     int i;
29     for (i = 0; i < n; i++)
30     {
31         printf("%5d", arr[i]);//等价于*(p+i)
32     }
33     printf("
");
34 }
35 
36 int Partition(int *arr, int i, int j)//做一次划分排序
37 {
38     int x = arr[i];//用区间的第一个记录为基准
39 
40     while (i < j)
41     {
42         while (i < j && arr[j] >= x)//从j所指位置起向前(左)搜索
43         {
44             --j;
45         }
46         arr[i] = arr[j];
47         while (i < j && arr[i] <= x)//从i所指位置起向后(右)搜索
48         {
49             ++i;
50         }
51         arr[j] = arr[i];
52     }//终止while循环之后i和j一定是相等的
53 
54     arr[i] = x;//基准记录x位于最终排序的位置i上
55 
56     return i;
57 }
58 
59 void QuickSort(int *arr, int low, int high)//对顺序表中的子区间进行快速排序
60 {
61     int p;
62     if (low < high)//长度大于1
63     {
64         print(arr, N);//打印数组
65 
66         p = Partition(arr, low, high);//做一次划分排序
67         QuickSort(arr, low, p - 1);//对左区间递归排序
68         QuickSort(arr, p + 1, high);//对右区间递归排序
69     }
70 }
原文地址:https://www.cnblogs.com/denggelin/p/5705484.html