从键盘接收一个5位整数,用该算法将其每位上的数字从小到大重新排列
要求是:找到最大的元素,与最后一个元素交换,实现从小到大排列。
-
#include <stdio.h>
-
#include <string.h>
-
//数组大小设置为5
-
#define SIZE 5
-
-
int main(){
-
//定义变量:
-
//a:临时存放收入的整数,利用其给数组的每一个元素赋值
-
//i,j:for循环使用的计数器,i打印数组for循环使用;j比较数组元素大小for循环使用
-
//array:存放输入的整数每一位上,值的数组
-
//count:计数器控制比较数组元素大小的循环,每次减少1,
-
//tmp:临时存放待交换的值
-
int a, i, j, array[SIZE], count = (SIZE - 1), tmp;
-
//maxPtr:用来在每一轮比大小循环中指向该轮循环中最大的值,这里先把它初始化指向数组的第一个元素
-
int *maxPtr = &array[0];
-
//从键盘输入一个5位整数,保存在整型变量a中
-
scanf_s("%d", &a);
-
//按照如下方法,拆分整数,并赋值给array数组
-
array[0] = a / 10000;
-
array[1] = (a % 10000) / 1000;
-
array[2] = ((a % 10000) % 1000) / 100;
-
array[3] = (((a % 10000) % 1000) % 100) / 10;
-
array[4] = (((a % 10000) % 1000) % 100) % 10;
-
//打印比较前数组各个值
-
printf("before arrangment:");
-
for ( i = 0; i < SIZE; i++){
-
printf("%d", array[i]);
-
}
-
printf("\n");
-
-
//开始进行比较
-
while (count > 0){
-
//遍历数组,让每一项跟maxPtr比较大小,如果比maxPtr大,则让maxPtr指向该元素,每轮下来,max都指向最大的元素
-
for ( j = 1; j <= count; j++){
-
if (array[j] > *maxPtr)
-
maxPtr = &array[j];
-
}
-
//进行交换,把max和数组最后一个元素进行交换
-
tmp = *maxPtr;
-
*maxPtr = array[count];
-
array[count] = tmp;
-
//重新把maxPtr定位到数组的第一个元素,为下一轮比较做准备
-
maxPtr = &array[0];
-
//把count减1,因为除第一轮外,每次比较,都不用比最后一个元素
-
count--;
-
}
-
//循环打印比较后的数组
-
printf("after arrangment:");
-
for (int i = 0; i < SIZE; i++)
-
printf("%d", array[i]);
-
printf("\n");
-
-
return 0;
-
}
阅读(166) | 评论(0) | 转发(0) |