排序之直接排序(边生成边排序)
Posted jianze
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序之直接排序(边生成边排序)相关的知识,希望对你有一定的参考价值。
一、原理:
假设数组为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(" "); 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(" "); 34 for(int i = 0; i < 10; i ++) { 35 printf("%d ", stuNum[i]); 36 } 37 38 39 return 0; 40 41 }
以上是关于排序之直接排序(边生成边排序)的主要内容,如果未能解决你的问题,请参考以下文章