插入排序
来源:互联网 发布:flash cs3 mac 中文 编辑:程序博客网 时间:2024/05/28 23:12
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,这样一直将所有的数进行排序。
1.插入排序, 从第二个数开始,先将第二个数做一个副本放在一旁(变量中)。
2.第二个数同前一个数比较,小于则用前一个数覆盖第二个数, 然后将副本放在前一个数前面
3.再将第三个数做一个副本取出,第三个数同前一个数比较,小于则用前一个数覆盖第三个数(此时第二个数位置空闲), 然后用副本同前一个数的前一个数比较,如果小于,则用前一个数的前一个数覆盖在原本的第二个位置上(此时第一个位置空闲), 将副本放入即可。
4.将数组中接下来的数依次做与3类似步骤,以3类推将副本往前作比较。直到副本不小于比较的数则该轮插入结束
5.重复4步骤,直到最后一个数
#include <stdio.h>#include <time.h>#include <stdlib.h>void InsertSort(int *pnArr, int nLen){ if (pnArr == NULL || nLen == 0) { return; } for (int i = 1; i < nLen; i++) { int nTmp = pnArr[i];int j; for (j = i; j > 0 && nTmp < pnArr[j - 1]; j--) { pnArr[j] = pnArr[j-1];//移位与下面的数据进行比较,从前面的进行排序,将改地址的值,将该值放到该放的位置 } pnArr[j] = nTmp;//一边循环一边排序,将ntmp放到大于某个数的位置 }}void PrintArr(int *pnArr, int nLen){ for (int i = 0; i < nLen; i++) { printf("%d ", pnArr[i]); } printf("\n");}int main(){ srand(time(NULL)); int nArr[10]; for (int i = 0; i < 10; i++) { nArr[i] = rand()%100; } printf("排序前:"); PrintArr(nArr, 10); InsertSort(nArr, 10); printf("排序后:"); PrintArr(nArr, 10);system("pause"); return 0;}
0 0
- 插入排序-【插入排序】
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 插入排序
- 百度地图,造成textview 成黑色方块
- 负载均衡原理与实践学习笔记(三)
- HTML中title前面小图标的实现
- mysql变量
- RHEL 6.5安装DRBD
- 插入排序
- 最大熵模型
- Web工程获取目录下的资源
- linux CR2 to JPG
- Fortran从文件读入数据的规律
- 28 - 字符串的全排列和组合
- Remove Duplicates from Sorted List
- 51nod1051(最大子矩阵和)
- CUDA nvcc编译步骤简单讲解