这是一个程序,其中一组数字按升序排序,通过查找数组左边点和结尾之间范围内的最大数字,然后通过以下方式将元素移动到正确的索引位置:切换元素。我的问题是它不是按升序排列的,因为它们之间的数字没有被排序,我想知道如何在程序中使用它。 这是我目前的代码:
#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;
}
非常感谢你。 :)
答案 0 :(得分:1)
您的SortArray函数逻辑是错误的。您正在从maxindex
到i
找到last index
,并将其替换为last index
,然后再增加i
。在第一次迭代中,最大数量在后续迭代中到达终止,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);
}
}
答案 1 :(得分:0)
函数sortArray()
void sortArray (int numbers[])
{
int i
int maxInd;
for (i=0; i<size;i++)
{
maxInd = indexMax (numbers, i, size-i-1);
swap (numbers, size-1-i, maxInd);
}
}
我做了一个小小的改动,它有效!!
答案 2 :(得分:0)
在indexMax
功能更改greater than (>)
至less than (>)
。