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

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    }

 

以上是关于排序之直接排序(边生成边排序)的主要内容,如果未能解决你的问题,请参考以下文章

排序之折半插入排序

堆排序 js实现

实例 | Java 折半插入排序算法及解析

最小生成树-kruskal

图的最小生成树

插入排序