gpt4 book ai didi

objective-c - C中的冒泡排序降序和升序不会排序

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:57 25 4
gpt4 key购买 nike

我让用户选择是按升序还是降序对元素进行排序。我知道我的代码可以对元素进行正确排序,但在 main 的某个地方我认为我在调用我的函数以按正确顺序打印升序/降序元素时犯了错误。或者我是否必须像在 bubble_sort 函数中那样使用另一个 if 语句?我需要这样做,以便 Main 函数将最终结果打印给用户。这是我得到的输出:输入元素数量3个输入 3 个整数43790后输入排序顺序请输入 A 升序或 D 降序d按降序排列的列表:43790

#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;
}

最佳答案

在这个声明中

printf("Please enter A for ascending or D for descending order\n");
scanf("%ld", &n);

您正在覆盖存储在 n 中的值,该值在这些语句之前表示数组中的元素数。您应该再声明一个 char 类型的变量并将其用于此代码段。

排序函数也应该声明为

void bubble_sort(long list[], int n, char c );

其中 n 是数组大小,c 是“A”或“D”

编辑:您的新代码包含许多拼写错误。尝试以下操作

#include <stdio.h>

void swap( int x, int y, int array[] )
{
int hold; //temp hold a number

hold = array[x];
array[x] = array[y];
array[y] = hold;
}

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[j] > list[j+1] )
{
swap( j, j + 1, list);
}
}
}
}

if ( c=='d' || c=='D' )
{
for ( i = 0 ; i < n - 1; i++ )
{
for ( j = 0 ; j < n - i - 1; j++ )
{
if ( list[j] < list[j+1] )
{
swap( j, j + 1, list);
}
}
}
}
}

int main(void)
{
int array[100], j, i;
char c;

printf("Enter number of elements: ");
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: ");
scanf( " %c", &c );

printf( "%c\n", c );

bubble_sort( array, j, c );

printf( "Sorted list in the selected order:\n" );
for ( i = 0; i < j; i++ )
{
printf( "%d ", array[i] );
}
puts( "" );

return 0;
}

关于objective-c - C中的冒泡排序降序和升序不会排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com