C和指標之動態記憶體分配之輸入很多整數進行排序
阿新 • • 發佈:2019-02-17
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