【发布时间】:2014-10-12 22:39:03
【问题描述】:
我让用户选择是按升序还是降序对元素进行排序。我知道我的代码可以对元素进行正确排序,但是在 main 的某个地方,我认为我在调用函数以正确顺序打印升序/降序元素时犯了错误。还是我必须像 bubble_sort 函数中那样使用另一个 if 语句?我需要这样做,以便 Main 函数将最终结果打印给用户。这是我得到的输出:
输入元素数量
3
输入 3 个整数
43
7
90
输入排序顺序
请输入 A 升序或 D 降序
d
降序排列的列表:
43
7
90
#include <stdio.h>
void bubble_sort(long [], char n);
int main()
{
long array[100], n, c;
printf("Enter number of elements\n");
scanf("%ld", &n);
printf("Enter %ld integers\n", n);
for (c = 0; c < n; c++)
scanf("%ld", &array[c]);
printf("Enter sort order\n");
fflush(stdin);
printf("Please enter A for ascending or D for descending order\n");
scanf("%ld", &n);
bubble_sort(array, n);
printf("Sorted list in descending order:\n");
for ( c = 0 ; c < n ; c++ )
{
printf("%ld\n", array[c]);
}
fflush(stdin);
getchar();
return 0;
}
void bubble_sort(long list[], char n)
{
long c, d, temp;
if(n=='a' || n=='A')
{
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
if (list[d] > list[d+1])
{
temp = list[d];
list[d] = list[d+1];
list[d+1] = temp;
}
}
}
}
if(n=='d' || n=='D')
{
long c, d, temp;
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d > n - c - 1; d++)
{
if (list[d] < list[d+1])
{/* Swapping */
temp = list[d];
list[d] = list[d+1];
list[d+1] = temp;
}
}
}
}
}
编辑:在这里我添加了一个交换函数,这样升序/降序逻辑更有效。但我似乎混淆了我认为是一个大问题的变量的使用。有人会指出并帮助我理解我需要在哪里以及为什么需要使用这些变量吗?非常感谢!
#include <stdio.h>
void bubble_sort(int list[], int n, char c);
void swap(int x, int y, int array[]);
int main()
{
int array[100], j, i;
char c;
printf("Enter number of elements\n");
scanf("%d", &j);
printf("Enter %d integers\n", j);
for (i = 0; i < j; i++)
scanf("%d", &array[i]);
printf("Please enter A for ascending or D for descending order\n");
scanf("%s", &c);
bubble_sort(array, j, i);
printf("Sorted list in descending order:\n");
for (i = 0 ; i < j ; i++ )
{
printf("%d\n", array[i]);
}
getchar();
return 0;
}
void bubble_sort(int list[], int n, char c)
{
int i, j;
if(c=='a' || c=='A'){
for (i = 0; i < (n - 1); i++){
for (j = 0; j < (n - i) - 1; j++){
if (list[i] > list[j])
{
swap(i, j, list); }
}
}
}
if(c=='d' || c=='D') {
for (i = 0 ; i < ( n - 1 ); i++) {
for (j = 0 ; j > (n - i) - 1; j++) {
if (list[i] < list[j])
{
swap(i, j, list);
}
}
}
}
}
void swap(int x, int y, int array[])
{
int hold; //temp hold a number
hold = array[x];
array[x] = array[y];
array[y] = hold;
}
【问题讨论】:
-
您同时使用 n 作为长度和选择,但这是两个不同的值。
-
哦,剪切-粘贴!,你是一个残酷无情的小妞。
-
@WhozCraig 你在说什么?我已经在这个项目上工作了几个小时。请有礼貌!
-
@pointing_Stack 绝不是我对你的任何批评。这只是一个声明,有时剪切-粘贴会导致我们甚至没有考虑过的缺陷。不幸的是,在那个小时内,您并没有感到奇怪,根据某些选项选择 C 对某个长度的序列进行排序
N您的排序函数将需要序列、序列长度 N 、 和 i> 选择的选项 C。鉴于您的函数只需要两个参数,其中一个显然是缺失的。调试将有助于极大地注意到,如果您在查看代码时没有看到它。 -
@WhozCraig 感谢您澄清您的评论。现在很有帮助:)
标签: objective-c c bubble-sort