为什么我的随机阵列&排序程序不工作?

时间:2016-01-31 23:53:58

标签: c arrays sorting random insertion-sort

我试过查找类似的问题,但我似乎没有找到任何解决我问题的方法。

我需要编写一个生成随机数组的程序,并通过插入排序对它们进行排序。阵列的实际随机性并不重要;重要的是代码本身会生成它们。我读了hererand() % n+1足以满足我的需要,可以生成1到n之间的数字。

我的程序代码是:

/*
 * Task 1, question e
 */
#include <stdio.h>
#include <stdlib.h>

//Random Array Length
#define L 10
#define MAX 100

void naive_sort(int[]);

int main(){

    int i, a[L];

    //Generate an array of random numbers
    for(i=0; i<L; i++)
        a[i]= rand() % (MAX+1);

    //Unsorted Array
    printf("\nUnsorted array: ");
    for(i=0; i<L; i++)
            printf("%d    ", a[i]);

    //Sorted Array
    naive_sort(a);

    return 0;
}

void naive_sort(int a[]){
    int i, j, t;

    for(i=1; i < L; i++){
        t=a[i];
        j=i-1;
        while((t < a[j]) && (j >= 0)){
            a[j+1] = a[j];
            j--;
        }
        a[j+1]=t;
    }

    printf("\nSorted array: ");
    for(i=0; i<L; i++)
        printf("%d    ", a[i]);
}

该算法似乎重复了一些数字而根本没有对列表进行排序。

Output

我将非常感谢您对此问题的任何帮助,我甚至尝试过duck debugging,但这似乎也不起作用!

2 个答案:

答案 0 :(得分:2)

您要分配到a[L]而不是a[i]

在排序循环中,您将相同的t分配给多个a[j+1],这可能不对。原文使用a[j]代替。

切换while循环的两个条件的顺序。在检查a[-1]仍为j之前,当前订单通过阅读>= 0来调用未定义的行为。

答案 1 :(得分:2)

在我的电脑上[kubuntu,g ++]你的代码可以运行。

在您的程序中放置一些打印语句可以帮助您。 您应该调用insert-sort。

的排序路由功能

Georg Fuss