演示 选择法排序 算法

程序员成长之旅 · 程序员成长之旅/C语言/笔记 · 526 字

#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");

}

}

}

运行结果: