【问题标题】:Selection Sort in C is not showing the right outputC中的选择排序未显示正确的输出
【发布时间】:2020-04-25 07:31:54
【问题描述】:
#include <stdlib.h>
#include <stdio.h>


void selection_sort(int array[],int num);

int main(void) {

    int i,num;

    printf("Write the number of elements :");
    scanf("%d",&num);

    int array[100];

    for(i=0;i<num;i++){

        scanf("%d",&array[i]);
    }

    selection_sort(array,num);

    return 0;
}

//Doing selection sort algorithm :

void selection_sort(int array[],int num){

    int i,j,min,temp;

    for (i=0;i<num;i++){

        min=i;

        for(j=i+1;j<num;j++){

            if (array[j]<array[i]){

                min=j;
            }
        }

        if (min!=i){

            temp=array[i];
            array[i]=min;
            min=temp;
        }
    }

    printf("Sorted elements :\n");

    for (i=0;i<num;i++){

        printf("%d\n",array[i]);
    }


}

请告诉我为什么我无法显示已排序的元素

【问题讨论】:

  • 在您发现您的程序无法按预期运行后,您做了什么?你有没有尝试过自己调试它?通过在调试器中运行程序和/或添加调试打印语句?如果是这样,你发现了什么? How to debug small programs
  • 你不是说array[i]=array[min];数组[分钟]=温度; ?
  • 一个建议:int array[] 恕我直言是个谎言,因为您没有将数组传递给函数。这实际上是int* array,因此函数内部的更改会影响调用者站点上的数组。只是告诉你,有些人更喜欢这种风格。
  • 一个建议:int array[] 恕我直言是个谎言,因为您没有将数组传递给函数。这实际上是int* array,因此函数内部的更改会影响调用者站点上的数组。只是告诉你,有些人更喜欢这种风格。

标签: c algorithm sorting selection-sort


【解决方案1】:

问题在于如何实现交换。

交换元素的正确方法是:

if (min!=i){

    temp=array[i];
    array[i]=array[min];
    array[min]=temp;
}

查看以下更正后的代码:

#include <stdlib.h>
#include <stdio.h>


void selection_sort(int array[],int num);

int main(void) {

    int i,num;

    printf("Write the number of elements :");
    scanf("%d",&num);

    int array[100];

    for(i=0;i<num;i++){

        scanf("%d",&array[i]);
    }

    selection_sort(array,num);

    return 0;
}

//Doing selection sort algorithm :

void selection_sort(int array[],int num){

    int i,j,min,temp;

    for (i=0;i<num;i++){

        min=i;

        for(j=i+1;j<num;j++){

            if (array[j]<array[i]){

                min=j;
            }
        }

        if (min!=i){

            temp=array[i];
            array[i]=array[min];
            array[min]=temp;
        }
    }

    printf("Sorted elements :\n");

    for (i=0;i<num;i++){

        printf("%d\n",array[i]);
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多