插入排序之----直接插入排序
2011-12-04 10:43
232 查看
直接插入排序是稳定的排序方法。
基本思路:依次把待排序的记录逐一按其关键字的大小插入到一个已经排好序的有序序列中去,直到所有的记录插完位置,得到一个新的有序序列。
算法的思路:
1.设置监视哨x,将待排序的数据赋给x,对于整个数组的排序而言,一般选第二个数据;
2.设置开始查找的位置j = i - 1;
3.在数组中先前扫描,扫描中将第j个记录后移,并且j--,为下一次循环做准备,直到x>=buf[j]为止;
4.将x插入在j+1的位置。
基本思路:依次把待排序的记录逐一按其关键字的大小插入到一个已经排好序的有序序列中去,直到所有的记录插完位置,得到一个新的有序序列。
算法的思路:
1.设置监视哨x,将待排序的数据赋给x,对于整个数组的排序而言,一般选第二个数据;
2.设置开始查找的位置j = i - 1;
3.在数组中先前扫描,扫描中将第j个记录后移,并且j--,为下一次循环做准备,直到x>=buf[j]为止;
4.将x插入在j+1的位置。
#include<stdio.h> #define Type char void zj_insert(Type *buf, int n) { int i,j; Type x ; for(i = 1; i < n; i++) //从数组中第二个数开始排序,进行n-1趟排序 { x = buf[i]; //设置监视哨,把待插入的数据赋值给它 j = i - 1; //从i-1开始往前比较 while(x < buf[j]) //确定插入位置。直到x>=buf[j]为止。 { buf[j + 1] = buf[j];//如果x < buf[j],将第j个元素往后移, j--; //并且j--为下一次比较做准备。 } buf[j + 1] = x; //插入待排序的数 } } int main() { int i; Type num[11] = "asdfghjkloq"; //{1,11,23,32,24,3,5,8,10,16,22} printf("Original array:"); for(i = 0; i < 11; i++) printf("%c ", num[i]); //注意输出格式的替换 printf("\n"); zj_insert(num, 11); printf("Sorted array:"); for(i = 0; i < 11; i++) printf("%c ", num[i]); //注意输出格式的替换 printf("\n"); return 0; }
相关文章推荐
- 白话经典算法系列之二 直接插入排序的三种实现
- java实现排序算法之2-路插入排序,直接插入排序,折半插入排序
- 排序算法(堆排序,直接插入排序,折半插入排序,希尔排序)
- 直接插入排序.c
- 直接插入排序
- 直接插入排序
- 数据结构之直接插入排序
- 直接插入排序
- python数据结构之直接插入排序
- 直接插入排序
- 直接插入排序
- 排序3:直接插入排序
- 第十五周内部排序(2)项目1---(1)直接插入排序
- 直接插入排序
- IOS- 快速排序,冒泡排序,直接插入排序和折半插入排序,希尔排序,堆排序,直接选择排序
- 直接插入排序
- java直接插入排序(扑克排序)
- 数据结构——排序——直接插入排序和折半插入排序算法
- 排序详解:直接插入排序
- 直接插入排序(修改自严蔚敏的数据结构)