1. 程式人生 > >排序之直接排序(邊生成邊排序)

排序之直接排序(邊生成邊排序)

span har const 產生 emp \n argc dbo 假設

一、原理:

技術分享圖片

  假設數組為numArr[4],並且數組第一個元素已經賦值為3,numArr[0] = 3;

  1.假設產生一個數temp = 5,若要在插入數組時排序,則先於numArr[0]比較,temp > numArr[0]; 則5應該插入在3後面,即numArr[1] = 5;

  2.假如temp = 1,temp < numArr[0]; 則1應插在3之前,同時3和以後的元素都要向後一位,即

    for (int i = 4; i > 0; I--) {

      numArr[i] = numArr[i - 1];

    }

    numArr[0] = 1;

  3.假如numArr[0] = 3; numArr[1] = 5;若要插入temp = 3,先於1比較,temp > numArr[0],無操作。 再與5比較,temp < numArr[1], 則2號及以後以後的元素都要向後      移一位,並將temp的值給numArr[1], 即:

   for (int i = 4; i > 1; I--) {

      numArr[i] = numArr[i - 1];

    }

    numArr[1] = temp;

二、拓展:刪除操作

  刪除上述數組第二個元素,則循環的i應從前往後,即:

  for (int i = 1; i <3 ; i ++) {

    numArr[i] = numArr[i + 1];

  }

  numArr[4] = 0;

三、完整源碼:

 1 #include <stdio.h>
 2 #include <stdbool.h>
 3 
 4 int main(int argc, const char * argv[]) {
 5     
 6     int stuNum[10] = {1,2,3,4,5,6,7};
 7     
 8     for (int i = 0; i < 10; i ++) {
 9         printf("%d ", stuNum[i]);
10 } 11 printf("\n"); 12 13 14 15 //在第四個元素前插入一個元素20,從後往前 16 17 for (int i = 9; i > 3; i --) { 18 stuNum[i] = stuNum[i - 1]; 19 } 20 stuNum[3] = 20; 21 22 for (int i = 0; i < 10; i ++) { 23 printf("%d ", stuNum[i]); 24 } 25 26 27 //刪除第二個元素的值,從前往後 28 for (int i = 1; i < 10; i ++) { 29 stuNum [i] = stuNum [i + 1]; 30 } 31 stuNum[9] = 0; 32 33 printf("\n"); 34 for(int i = 0; i < 10; i ++) { 35 printf("%d ", stuNum[i]); 36 } 37 38 39 return 0; 40 41 }

排序之直接排序(邊生成邊排序)