演示 选择法排序 算法

#include<stdio.h>
int main() {
int i = 0, j = 0;
int Max = 0,Temp1=0,Temp2=0, Num[11] = { 5496,57227,12,672,3494,44546,6664,442454,24554,23234 };
for (i = 0; i < 10; i++) {//控制运行的第几个数字
for (j = i, Max = Num[i], Temp2 = 0; j < 10; j++) {//计算自己和后面所有的数字谁最大
if (Num[j] > Max) {
Max = Num[j];//最大的缓存在Max
Temp2 = j;//同时缓存Num[j]的编号
}
}
if (Max > Num[i]) {//防止相等(其实没什么用= =)
Temp1 = Num[i];//缓存Num[i]
Num[i] = Max;//Num[i]等于缓存好的最大数(自己和后面)
Num[Temp2] = Temp1;//相等于 Num[j]=Num[i] 只不过只能提取缓存
}
}
for (i = 0, j = 1; i < 10; i++, j++) {//输出排好序的数字
printf("%d\t", Num[i]);
if (j % 5 == 0) {
printf("\n");
}
}
}
运行截图:

其他版本(之前误认为选择法为冒泡排序法):
#include<stdio.h> //冒泡法排序
int main() {
int i = 0, j = 0;
int Num[11] = { 12,34541,39436,99464664,34564,35,145646,1546,231,344126 };//预留出一位养成好习惯
int Temp = 0, Max = 0;
for (i = 0; i < 10; i++) {//外层循环 控制运行到第几个数字
Max = Num[i];//比对之前设置“Max”默认值为 当前运行数字“Num[i]”
for (j = i; j <10; j++) {//内层循环 控制 当前数字 需要对比几次(和后面所有的数字进行比对)
if (Num[j] > Max) {//如果 被对比数字 比 缓存的最大数大(默认为当前运行数字) 就把当前数字替换为当前最大值, 并且把“当前最大值”原位置替换为 当前运行数字
Max = Num[j];
Temp = Num[i];
Num[i] = Max;
Num[j] = Temp;
}
}
}
for (i = 0,j=1; i < 10; i++,j++) {
printf("%9d\t", Num[i]);
if (j % 5 == 0) {
printf("\n");
}
}
}
运行结果:
