(1)冒泡法排序法
#include<stdio.h> void sort(int arr[], int num); int main(void) { int arr[10]; int i; printf("please enter ten numbers: "); for (i = 0; i<10; i++) scanf("%d", &arr[i]);//scanf不能接收空格和回车符 sort(arr,10); for (i = 0; i<10; i++) printf("%d ", arr[i]); return 0; } void sort(int arr[],int num) { int i,j= 0; int temp = 0; //冒泡法进行排序 for (i = 0; i < num-1; i++) //进行比较num-1趟 { for (j = 0; j < num - 1 - i; j++) //比较次数依次递减 { if (arr[j]>arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
(2)选择排序法
#include<stdio.h> void sort(int arr[], int num); int main(void) { int arr[10]; int i; printf("please enter ten numbers: "); for (i = 0; i<10; i++) scanf("%d", &arr[i]);//scanf不能接收空格和回车符 sort(arr,10); for (i = 0; i<10; i++) printf("%d ", arr[i]); return 0; } //选择法(减少交换次数) void sort(int arr[],int num) { int i, j, k = 0; int temp = 0; for (i = 0; i < num-1; i++)//依次选取第一个数 { k = i; //标记最小值 for (j = i + 1; j<num; j++)//要比较的数 { if (arr[k]>arr[j]) { k = j; } } //找到第0,1,2,3,... 先找最小的 if (k != i) { temp = arr[i];//交换arr[k]和arr[i]的值 arr[i] = arr[k]; arr[k] = temp; } } }
(3)递归排序法
#include<stdio.h> void quick(int arr[], int L, int R); int main() { int arr[10]; int i; printf("please enter ten numbers: "); for (i = 0; i<10; i++) scanf("%d", &arr[i]); quick(arr, 0, 9); for (i = 0; i<10; i++) printf("%d ", arr[i]); return 0; } void quick(int arr[], int L, int R) { int i = R; int j = L; int pivot = arr[(i + j) / 2]; //中间 while (j <= i) { while (arr[j]<pivot){ j++; } while (pivot<arr[i]){ i--; } if (j <= i) { int temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; j++; i--; } } if (L<i) quick(arr, L, i); if (j<R) quick(arr, j, R); }