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("排序前\n"); 15 print(arr, N);//打印数组 16 printf("\n"); 17 18 QuickSort(arr, 0, N - 1);//对顺序表中的子区间进行快速排序 19 20 printf("排序后\n"); 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("\n"); 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 }