Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的选择排序程序_C_Arrays_Stdio_Selection Sort - Fatal编程技术网

C语言中的选择排序程序

C语言中的选择排序程序,c,arrays,stdio,selection-sort,C,Arrays,Stdio,Selection Sort,这是一个程序,其中一组数字按升序排序,方法是在数组的左点和末端之间的范围内找到最大的数字,然后通过切换元素将该元素移动到其正确的索引位置。我的问题是它不是按升序排列的,因为中间的数字没有顺序,我想知道如何在程序中适应它。 这是我目前的代码: #include <stdio.h> /* Library inclusions */ #include "genlib.h" #include "simpio.h" #d

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

#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;
}
#包含/*库包含*/
#包括“genlib.h”
#包括“simpio.h”
#定义大小7/*常量*/
void sortArray(整数[]);/*原型*/
int indexMax(int数[],int低,int高);
无效掉期(整数编号[],整数loc,整数loc1);
void getArray(整数[]);
无效显示数组(整数[]);
main()
{
整数[大小];
getArray(数字);
sortArray(数字);
显示阵列(数字);
getchar();
}
void getArray(整数[])/*函数getArray*/
{
int i;

对于(i=0;i您排序的函数逻辑是错误的。您正在从
i
最后一个索引
查找
maxindex
,并将其替换为
last index
,然后递增
i
。在第一次迭代中,最大的数值在随后的迭代中到达末尾,将只选择
最后一个索引
被编辑为
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);
     }
}

函数
sortArray()

void sortArray(整数[])
{
int i
int-maxInd;

对于(i=0;iIn
indexMax
函数更改
大于(>)
小于(>)

今天就做出承诺:一旦你不是初学者,你就会更改显示名称。你是否尝试过在调试器中逐行逐行地检查代码,以帮助你发现可能的错误?使用一个小数组执行此操作,这样就不会花这么长时间。非常感谢:)但它不起作用:(然而,沙什瓦特·库马尔已经解决了这个问题,所以没关系。
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);
     }
}