排序之直接排序(邊生成邊排序)
阿新 • • 發佈:2018-07-19
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 }
排序之直接排序(邊生成邊排序)