C語言——例項039 有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中
阿新 • • 發佈:2019-01-29
第一個程式:有bug,但沒發現
/* Name: Copyright: Author: Date: 31/07/17 11:42 Description: 【程式39】題目:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。 1. 程式分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況, 插入後此元素之後的數,依次後移一個位置。 ? */ #include <stdio.h> int main() { int a[100],temp,i,j,n,min; int x,temp2; /*輸入待排序資料*/ printf("請輸入待排序的數的個數:"); scanf("%d",&n); printf("\n請輸入%d個數:",n); for(i = 0;i < n;i++) { scanf("%d",&a[i]); } printf("\n"); /*排序*/ for(i = 0;i < n - 1;i++) { min = i; for(j = i + 1;j < n;j++) { if(a[min] > a[j]) { min = j; } } temp = a[i]; a[i] = a[min]; a[min] = temp; } /*輸出排序*/ printf("從小到大排序後的%d個數為:\n",n); for(i = 0;i < n;i++) { printf("%-5d",a[i]); } printf("\n\n"); /*插入*/ while(printf("請輸入插入資料:") && scanf("%d",&x) != EOF) { printf("\n"); n++; if(x >= a[n - 2]) { a[n - 1] = x; printf("從小到大排序後的%d個數為:\n",n); for(i = 0;i < n;i++) { printf("%-5d",a[i]); } printf("\n\n"); } else { for(i = 0;i < n - 2;i++) { if(x < a[i]) { temp = a[i]; a[i] = x; for(j = i + 1;j < n;j++) { temp2 = a[j]; a[j] = temp; temp = temp2; } break; } } printf("從小到大排序後的%d個數為:\n",n); for(i = 0;i < n;i++) { printf("%-5d",a[i]); } printf("\n\n"); } } return 0; }
執行結果:
第二個程式:沒有仔細測試
/* Name: Copyright: Author: Date: 31/07/17 11:42 Description: 【程式39】題目:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。 1. 程式分析:首先判斷此數是否大於最後一個數,然後再考慮插入中間的數的情況, 插入後此元素之後的數,依次後移一個位置。 ? */ #include <stdio.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return (*(int *)a-(*(int *)b)); //從小到大 } int main() { int a[100],temp,i,j,n,min; int x,temp2; /*輸入待排序資料*/ printf("請輸入待排序的數的個數:"); scanf("%d",&n); printf("\n請輸入%d個數:",n); for(i = 0;i < n;i++) { scanf("%d",&a[i]); } printf("\n"); /*排序*/ qsort(a,n,sizeof(int),cmp); /*輸出排序*/ printf("從小到大排序後的%d個數為:\n",n); for(i = 0;i < n;i++) { printf("%-5d",a[i]); } printf("\n\n"); /*插入*/ printf("請輸入插入資料:"); scanf("%d",&x); a[n] = x; qsort(a,n + 1,sizeof(int),cmp); printf("\n從小到大排序後的%d個數為:\n",n + 1); for(i = 0;i < n + 1;i++) { printf("%-5d",a[i]); } printf("\n\n"); return 0; }