使用选择排序对数组进行排序将不起作用

时间:2013-10-30 16:28:46

标签: c sorting

为什么这个选择排序程序我写的不工作
它不对数组进行排序。我做错了什么?

//This program uses selection sort algorithm to sort an array

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

void main()  {
    int arr[10], i, j, small, pos, a;

    printf("SELECTION SORT\n"); 

    srand(time(NULL));
    i = 0;
    while (i < 10) {
        arr[i] = rand() % 100;
        printf("%d ", arr[i]);
        i++;
    }

    j = 0;
    while (j < 10){
        i = j;
        small = arr[j];
        while (i < 10) {
            if (arr[i] < small) {
                small = arr[i];
                pos = i;
            }
            i++;
        }

        a = arr[pos];       
        arr[pos] = arr[j];
        arr[j] = a;
        j++;
    }

    printf("\nThe array has been sorted\n");

    i = -1;
    while (++i < 10)
        printf("%d ", arr[i]);
    getch();
}

找到最小元素的算法部分有效 外环是我认为我犯了一个错误,但我无法弄清楚是什么 一点建议将不胜感激 感谢

1 个答案:

答案 0 :(得分:0)

您需要对代码进行非常小的更改才能使其正常工作

... 
while(j<10) 
{
    i=j+1;  // change i=j to i=j+1
    small=arr[j];
    while(i<10)
    {

    ...
    }

    if (small!=arr[j])
    {
      a=arr[pos];     
      arr[pos]=arr[j];
      arr[j]=a;
    }
    j++;
    ...

你能看出为什么需要这种改变吗?