1. 程式人生 > >C和指標之動態記憶體分配之輸入很多整數進行排序

C和指標之動態記憶體分配之輸入很多整數進行排序

1、問題

讀取一列整數,然後按升序排列它們,最後列印列表


2、程式碼實現

#include <stdio.h>
#include <stdlib.h>
/**
此函式根據你給的比較條件進行快速排序,通過指標移動實現排序
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
**/
int compare(void const *a, void const *b)
{
    int const *pa = a;
    int const *pb = b;
    return *pa > *pb ? 1 : *pa < *pb ? -1 : 0;
}

int main()
{
    int *array, values, i;
    //輸入多少個數據
    puts("輸入整數個數據");
    if (scanf("%d", &values) != 1 || values <= 0)
    {
        puts("非法的資料");
        goto error;
    }
    //分配記憶體
    array  = malloc(values * sizeof(int));
    if (array == NULL)
    {
        goto error;
    }
    //讀取資料
    for (i = 0; i < values; ++i)
    {
        printf("?");
        if (scanf("%d", array + i) != 1)
        {
           printf("error reading value %d\n", i);
           goto error;
        }
    }
    //排序
    qsort(array, values, sizeof(int), compare);
    //列印結果
    for (i = 0; i < values; ++i)
    {
        printf("%d\n", *(array + i));
    }
    if (array)
       free(array);
    return 0;
error:
    puts("error happen");
    if (array)
    {
        free(array);
    }
    return -1;
}



3、執行結果

1111deMacBook-Pro:malloc a1111$ vim sort.c
1111deMacBook-Pro:malloc a1111$ gcc -g sort.c -o sort
1111deMacBook-Pro:malloc a1111$ ./sort
輸入整數個數據
5
?1
?26
?3
?4
?9
1
3
4
9
26