c - 如何将最大的数字推到数组的后面
问题描述
在第一次通过后如何做到这一点,最大的数字保证在数组的最高编号的元素中;在第二遍之后,两个最高的数字“就位”,依此类推。
当前代码仅使其从最大传递到最小,但我不希望那样。
我只是想按原始顺序对数据项执行此操作。
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void)
{
int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
int noc = 0;
puts("Data items in original order");
for (int noc = 0; noc < 9; noc++) {
printf("\n");
for (size_t i = 0; i + noc < SIZE; i++) {
printf("%4d", a[i]);
}
for (int pass = 1; pass < SIZE; pass++) {
for (size_t i = 0; i < SIZE - pass; i++) {
if (a[i] > a[i - 1]) {
int hold = a[i];
a[i] = a[i - 1];
a[i - 1] = hold;
}
}
}
}
for (int pass = 1; pass < SIZE; pass++) {
for (size_t i = 0; i < SIZE - pass; i++) {
if (a[i] > a[i + 1]) {
int hold = a[i];
a[i] = a[i + 1];
a[i + 1] = hold;
}
}
}
puts("\nData items in ascending order");
for (size_t i = 0; i + noc < SIZE; i++) {
printf("%4d", a[i]);
}
puts("");
}
解决方案
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main(void)
{
int a[SIZE] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
int i;
int pass = 0;
while(pass < SIZE - 1){
int index = SIZE - pass - 1;
int MAX = a[index];
for(i=0;i<SIZE - pass;i++){
if(a[i]>MAX) {
MAX = a[i];
index = i;
}
}
a[index] = a[SIZE - pass - 1];
a[SIZE - pass - 1] = MAX;
for(i=0 ;i < SIZE ; i++ ) printf("%d ",a[i]);
printf("\n");
pass++;
}
}
推荐阅读
- javascript - 图像的访问控制允许来源问题
- angular - CanActivate 保护中的 ActivatedRoute 参数为空
- javascript - 用于随机化消息的字符串插值数组
- python - 需要帮助解决“ZeroDivisionError:除以零”
- php - laravel 检查上传表单中的文件扩展名
- django - 直接在 Django 管理表单模板中访问字段?
- ajax - 当jsp中发生ajax调用时,如何从控制器获取数据到jsp?
- java - 如何在弹簧靴中有条件地自动装配?
- c# - 如何在 SQL 选择查询中添加参数?
- varnish - Varnish Request Url 与 apache 请求不同