内部排序(一)直接插入法
来源:互联网 发布:千千秀字软件 编辑:程序博客网 时间:2024/06/05 10:59
#include<stdio.h>#include<stdlib.h>#define maxsize 8 typedef struct{int r[maxsize+1];int len;}sqlist;//直接插入排序void InsertSort(sqlist &st ){ int i,j,t; for(i=2;i<st.len;i++) { st.r[0] = st.r[i]; for(j=i-1;j>0 && st.r[0]<st.r[j] ;j--) //直接算,每一个来,都比较 st.r[j+1] = st.r[j]; st.r[j+1] = st.r[0]; } }void InsertSort1(sqlist &st ){ int i,j,t; for(i=2;i<st.len;i++) if( st.r[i] < st.r[i-1] ) { st.r[0] = st.r[i]; for(j=i-1;j>0 && st.r[0]<st.r[j] ;j--) //其实if已经比较过,因此这样写没有 2 的效率高 st.r[j+1] = st.r[j]; st.r[j+1] = st.r[0]; }}void InsertSort2(sqlist &st ){ int i,j,t; for(i=2;i<st.len;i++) if( st.r[i] < st.r[i-1] ) { st.r[0] = st.r[i]; st.r[i] = st.r[i-1]; for(j=i-2;j>0 && st.r[0]<st.r[j] ;j--) //此处是j=i-2,在上一行中已经比较过,故减少一次交换 st.r[j+1] = st.r[j]; st.r[j+1] = st.r[0]; }}int main(){ sqlist st;int d[maxsize] = {49,38,65,97,76,13,27,49};for(int i=0;i<8;i++)st.r[i+1] = d[i];//将数组的第一项置为空st.len = maxsize+1;InsertSort2(st); for(int j=1;j<st.len;j++) printf("%d\n",st.r[j]);return 0;}
不将数组的第一项置空,也可以写:
#include<stdio.h>#include<stdlib.h>#define len 12void InsertSort(int d[]){ int i,j,t; for(i=1;i<len;i++) if( d[i] < d[i-1] ){ t = d[i]; d[i] = d[i-1]; for(j = i-2; j>=0 && t < d[j];--j) d[j+1] = d[j]; d[j+1] = t;}}void InsertSort1(int d[])//没有上一种写法效率高,因此即使后项比前项大,还要进行循环内的比较, //而按照直接插入的思想,后项如果比前项大,那么可以直接放入数组中, //不再进入循环比较{ int i,j,t;for(i=1;i<len;i++) { t = d[i]; for(j = i-1; j>=0 && t< d[j];--j) d[j+1] = d[j]; d[j+1] = t;}}int main(){ int d[len] = {49,38,65,97,76,13,27,49,85,11,23,47};InsertSort1(d); for(int k=0;k<len;k++) printf("%d\n",d[k]);return 0;}
- 内部排序(一)直接插入法
- 内部排序思想、直接插入排序法
- 【内部排序】直接插入排序
- 插入排序一(直接插入排序)
- 内部排序之插入排序(直接插入排序,二分插入排序,希尔插入排序)
- 【内部排序】一:直接插入排序(Straight Insertion Sorting)的多种实现(不断优化+源码)
- 内部插入排序---直接插入排序
- 插入排序之直接插入(法一)
- 内部排序(一)插入排序
- 【排序一】插入排序(直接插入排序&&希尔排序)
- 直接插入排序法---排序算法(一)
- 排序算法(一):直接插入排序
- 排序(一):直接插入排序
- 排序算法(一):直接插入排序
- 排序算法 -- (一)直接插入排序
- 排序算法(一)---- 直接插入排序
- 排序算法(一)直接插入排序
- 排序算法(一)直接插入排序
- DB9串口
- InputStream中read()与read(byte[] b)
- Why Playing is important For Excellent Time Management
- C统计单词个数
- UIView添加支持代码块的手势
- 内部排序(一)直接插入法
- UVa - 644 - Immediate Decodability
- Android去除系统自带动画的两种方法
- ntpdate时间同步软件安装
- SOCKET 检测链接是否断线的三种方法
- 营销方式该怎么去定位
- 使用Cache提高ASP.NET性能
- java面向对象基础_final
- Debug与Release版本区别