冒泡法
相邻两个位数比较,较小值往前跑,较大值往后跑。
/*** @Auther: 小雷学长* @Date: 2021/12/9 - 17:07*/#include <stdio.h>void main() {/*** @pescripition 冒泡排序*///定义5个数字int a[5] = {12, 5, 34, 23, 1};int p_nums;printf("原数组为:\n");for (p_nums = 0; p_nums < 5; p_nums++) {printf("%5d", a[p_nums]);}/*** @pescripition 冒泡排序* @method 利用for嵌套* @param i,j,temp:临时值*/int i, j, temp;//列向排序for (i = 0; i < 4; i++) {/** 相邻排序,将小的值向前移* j<4-i 每次排序最大值一定在末尾,已排过的无需重复排序*/for (j = 0; j < 4 - i; j++) {//相邻比较if (a[j] > a[j + 1]) {//将小的值赋值到temp,替换,保持较小的值在前面temp = a[j + 1];//将大的值往后移a[j + 1] = a[j];//小值往前赋值a[j] = temp;}}}printf("\n从小到大排序为:\n");for (i = 0; i < 5; i++) {printf("%5d", a[i]);}}
选择排序
每次循环用首位数与次位数比较,若次位比首位小,则较小值前移,较大值后移动。
/**
* @Auther: 小雷学长
* @Date: 2021/12/9 - 17:49
* @name: 选择排序
* @descripition 每次循环用首位数与次位数比较
*/
#include<stdio.h>
void main() {
int i, j, temp;
//数组
int a[10] = {12, 5, 34, 23, 1, 15, 56, 61, 52, 87};
printf("原数组为:\n");
//打印原数组
for (i = 0; i < 10; i++) {
printf("%5d", a[i]);
}
//10个数需要排序9次
for (i = 0; i < 9; i++) {
//每次循环用首位数与次位数比较,所以需要i+1(第二位)
for (j = i + 1; j <= 9; j++) {
//如果首位比次位大,将次位前移,与首位替换
if (a[i] > a[j]) {
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
printf("\n从小到大排序为:\n");
for (i = 0; i < 10; i++) {
printf("%5d", a[i]);
}
}
