C语言中的数字排序法有很多:
1.冒泡排序法
2.选择排序法
3.比较排序法
4.快速排序法
......
冒泡排序法
原理:(升序)将一串乱序数组中的数字元素进行相邻两两比较,如果第一个数字大于第二个数字,进行交换。然后继续进行第二个和第三个比较,如果第二个数比第三个数大,进行交换,反之则继续下一次比较。数组进行第一次全数组比较将得到数组中最大的数字放在数组最后。然后进行第二次数组大比较,减去第一轮得到的最大数字得到第二大的数字放到数组倒数第二位。以此类推,将乱序数组由小到大排序。
以下为实践程序
#include<stdio.h> void cmd(int num[]) { int a = 1; int i = 0; int t; for (i = 1; i < 10; i++) { for (int j = 0; j < 10 - i; j++) { if (num[j] > num[j + 1]) { a = 0; t = num[j]; num[j] = num[j + 1]; num[j + 1] = t; } } if (a == 1) break; } } int main(void) { int num[10]; for (int i = 0; i < 10; i++) { scanf("%d", &num[i]); } cmd(num); for (int i = 0; i < 10; i++) { printf("%d ", num[i]); } return 0; }
选择排序法
原理:(升序)将乱序数组从将第一个数字确定与后面的数字挨个比较,如果第一个数字比后面比较的数大就交换,反正则继续比较,第一次全部比较完得到最小的数字在第一位。进行第二轮比较,从第二个数开始,与后面的数进行比较得到第二小的数放在第二位。以此类推则可得到升序的数组。
见代码
#include<stdio.h> void cmd(int num[]) { int t; for (int i = 0; i < 9; i++) { for (int j = i + 1; j < 10; j++) { if (num[i] > num[j]) { t = num[j]; num[j] = num[i]; num[i] = t; } } } } int main(void) { int num[10]; for (int i = 0; i < 10; i++) { scanf("%d", &num[i]); } cmd(num); for (int i = 0; i < 10; i++) { printf("%d ", num[i]); } return 0; }
比较排序法
原理:(升序) 在一个乱序数组中,先将第一个数的下标记住,然后和剩下的数字进行比较,如果第一个数大于剩下的数,将大于第一个数的角标进行交换,找到最小数的角标后,如果不在第一位时,则将位置互换,将最小的数字放到最左边,以此类推,将得到完整升序数列。
见代码:
#include<stdio.h> void cmd(int* p) { int t; int a; for (int i = 0; i < 10; i++) { a = i; for (int j = i; j < 10; j++) { if (p[a] > p[j]) a = j; } if (a != i) { t = p[i]; p[i] = p[a]; p[a] = t; } } } int main(void) { int num[10]; for (int i = 0; i < 10; i++) { scanf("%d", &num[i]); } cmd(num); for (int i = 0; i < 10; i++) printf("%d ", num[i]); return 0; }
以上是三种比较常见的C语言排序方法!!!