/*已知數組a中的元素已按由小到大順序排列,如下程序的功能是將輸入的一個數插入數組a中,插入後,數組a中的元素仍然由小到大順序排列*/數組
#include <stdio.h> /** * 折半查找法找到須要插入的位置(下標) * * @param p 數組 * @param num 須要插入的數 * @param length 數組元素的個數 * * @return 須要插入數組對應的下標 */ int arrayInsertNumber(int *p, int num,int length) { int max = length - 1; int min = 0; int mid = (max + min)/2; while (max >= min) { mid = (max + min)/2; if (num > p[mid]) { min = mid + 1; }else if (num < p[mid]) { max = mid - 1; }else { return mid; } } return mid - 1; } int main(int argc, const char * argv[]) { int a[] = {1,3,5,5,7,9,10,19,20,30}; int length = sizeof(a)/sizeof(a[0]); //定義數組b[]保存插入後的數據 int b[length + 1]; int num; printf("請輸入須要插入數組中的數字\n"); scanf("%i",&num); //調用函數獲取下標 int index = arrayInsertNumber(a, num, length); printf("須要插入數組a[]下標爲 %i 的位置\n",index); int j = 0; //遍歷數組a[] for (int i = 0; i < length ; i++) { //index前的數分別對應賦值給b[] if (i < index) { b[j++] = a[i]; } //index對應的a[i]仍然對應賦值,把num插入到index+1的位置 else if (i == index) { b[j] = a[i]; b[++j] = num; } //原a數組index以後的數據依次後移一位 else { b[++j] = a[i]; } } printf("插入後的數組爲:\n"); //遍歷輸出b[] for (int i = 0; i < length + 1; i++) { printf("%i ",b[i]); } printf("\n"); return 0; }