gpt4 book ai didi

c - C中的选择排序程序

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:06 27 4
gpt4 key购买 nike

这是一个程序,其中一组数字按升序排序,方法是找到左边点和数组末尾之间范围内的最大数字,然后将该元素移动到其正确的索引位置切换元素。我的问题是它不是按升序排列的,因为中间的数字没有排序,我想知道如何将其放入程序中。这是我目前的代码:

#include <stdio.h>                                    /* Library inclusions */ 
#include "genlib.h"
#include "simpio.h"
#define size 7 /* Constants */

void sortArray (int numbers[]); /* prototypes */
int indexMax (int numbers[], int low, int high);
void swap (int numbers[], int loc, int loc1);
void getArray (int numbers[]);
void displayArray (int numbers[]);

main()
{
int numbers[size];
getArray(numbers);
sortArray(numbers );
displayArray (numbers);
getchar();
}

void getArray (int numbers[]) /*Function getArray*/
{
int i;

for (i=0; i<size; i++)
{
printf ("Enter an integer? ");
numbers[i]=GetInteger();
}
}

void displayArray (int numbers[]) /*Function displayArray*/
{
int i;

printf ("\n The sorted list is: \n");
for (i=0; i< size; i++)
{
printf ("%d\t", numbers[i]);
}
}

void sortArray (int numbers[]) /*Function sortArray*/
{
int i , maxInd;

for (i=0; i<size;i++)
{
maxInd = indexMax (numbers, i, size-1);
swap (numbers, size-1, maxInd);
}
}

int indexMax (int numbers[], int low, int high) /*Function indexMax*/
{
int i, maxInd;

maxInd=high;
for (i=low;i<=high;i++)
{
if (numbers[i]>numbers[maxInd])
{
maxInd =i;
}
}
return (maxInd);
}

void swap (int numbers[], int loc, int loc1) /*Function swap*/
{
int temp;

temp=numbers[loc];
numbers[loc]=numbers[loc1];
numbers[loc1]=temp;
}

非常感谢。 :)

最佳答案

你的 SortArray 函数逻辑是错误的。您正在寻找从 ilast indexmaxindex 并将其替换为 last index 然后递增 i 。在第一次迭代中最大数到达end,之后在后续迭代中,last index只会被选为maxindex,数组不会有任何变化。

相反,您始终需要从第一个索引迭代到比上一个最后一个索引小的索引。

void sortArray (int numbers[])                        /*Function sortArray*/
{
int i , maxInd;

for (i=size-1; i>=0;i--)
{
maxInd = indexMax (numbers, 0, i);
swap (numbers, i, maxInd);
}
}

关于c - C中的选择排序程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17470864/

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