C 程序。如何在 C 中对随机列表进行排序?

时间:2021-05-08 15:01:15

标签: c sorting bubble-sort

我想用随机 5 个数字对列表进行排序。他们还给了我一个准备好的清单,以检查它是否有效。随机列表必须对列表中最小的数字进行排序,并将其放在列表的第一个数组中,然后放在第二个和第三个数组中......直到它被排序。 我不知道为什么它不起作用...请帮忙。

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

void generate_randomzahlen(int *a, int *n) {
    int i;
    for (i = 0; i < n; i++) {
        a[i] = rand() % 5;
        printf("%d\n", &a[i]);
    }
}

void setMINAdressIfMinIsGreater(int *min, int *arr) {
    if (*min > *arr) {
        *min = arr;
    }
}

void swap(int *a, int *b) {
    printf("Anfang A: %d, Anfang B: %d\n", *a, *b);
    int text_a = *a;
    *a = *b;
    *b = text_a;
    printf("A danach: %d, B danach: %d\n", *a, *b);

void selektionsSort(int arr[], int length) {
    int *cur;
    int *min;
    int i, j;
    for (i = 0; i < length; i++) {
        cur = &arr[i];
        min = &arr[i];
        for (j = i + 1; j < length; j++) {
            setMINAdressIfMinIsGreater(&min, &arr[j]);
        }
        swap(cur, min); //Array der kleiner ist wird dann am Anfang von meine Liste
    }
}

int main() {
    //Checking ob es richtig ist
    int array[] = { 5, 4, 3, 2, 1 };
    int liste = array;
    printf("Die erste Liste: %d\t", liste);

    printf("Sortierung von der Liste: \n");
    selektionsSort(array, 5);//(array[],length von Liste);

    int n, i;
    printf("\n Wie viele zufallige Zahlen soll dieser Array haben?: ");
    scanf("%d", &n);
    generate_randomzahlen(a, n);

    printf("\nZufallige Liste: ");
    for (i = 1; i < n; i++) {
        printf("d", a[i]);
    }

    selektionsSort(a[i], n);
    printf("Richtige Liste: ");
    for (i = 0; i < n; i++) {
        printf("%d\n", a[i]);
        printf("\n \n");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

您在函数声明中有错误:

void generate_randomzahlen (int * a, int * n) // declare n as a pointer
{
    int i;
    for (i=0; i<n; i++){ // use n as a value so result is undetermined
        a[i]=rand()%5;
        printf("%d\n",&a[i]);
    }
}

您应该将声明更改为:

void generate_randomzahlen (int * a, int n) // declare n as a int