冒泡法
相邻两个位数比较,较小值往前跑,较大值往后跑。
/**
* @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]);
}
}