数据结构之直接插入排序
2017-11-13 11:34
162 查看
数据结构之直接插入排序(升序):
算法思想:
认为线性表中第一个元素有序,从第二个元素开始,与前一个元素比较大小:
(1)如果当前元素值大于前一个元素,不做任何处理;
(2)如果当前元素小于前一个元素,则应当将当前元素插入到已排序的顺序表中,将当前元素A[i]复制到A[0]中,作为哨兵。在已排序顺序表中从后往前查找待排元素的插入位置。如果已排序顺序表中的元素大于A[0],则应后移一位。
代码
运行结果:
算法思想:
认为线性表中第一个元素有序,从第二个元素开始,与前一个元素比较大小:
(1)如果当前元素值大于前一个元素,不做任何处理;
(2)如果当前元素小于前一个元素,则应当将当前元素插入到已排序的顺序表中,将当前元素A[i]复制到A[0]中,作为哨兵。在已排序顺序表中从后往前查找待排元素的插入位置。如果已排序顺序表中的元素大于A[0],则应后移一位。
代码
#include<stdio.h> #define ElemType int #define maxsize 21 typedef struct{ ElemType data[maxsize]; int length; }sqlist; void printElem(sqlist* l) { int i=1; for(i=1;i<l->length;i++) printf("%d ",l->data[i]); printf("\n"); }//printElem void InsertSort(sqlist* l) { int i=0,j=0; for(i=2;i<l->length;i++) { if(l->data[i]<l->data[i-1]) { l->data[0]=l->data[i]; //l->data[0]为哨兵 for(j=i-1;l->data[0]<l->data[j];--j) //和i之前的的元素比较,如果l->data[i]小, { //则不断后移元素,直到找到插入位置 l->data[j+1]=l->data[j] ; } l->data[j+1]=l->data[0]; //将元素插入到最终位置 } printf("第%d次排序后。\n",i-1); 4000 printElem(l); } } //InsertSort int main() { sqlist ll; ll.data[0]=0; ll.length=1; int i=1; for(i=1;i<maxsize;i++) { ll.data[i]=rand()%100; ll.length++; } printf("未排序之前的线性表。\n"); printElem(&ll); InsertSort(&ll); }
运行结果:
相关文章推荐
- 【数据结构基础】直接插入排序
- 排序-插入排序-直接插入排序-数据结构(26)
- 【数据结构与算法】【排序】直接插入排序的代码实现
- 数据结构——直接插入排序(c++)
- 数据结构之---C语言实现直接插入排序
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
- 数据结构之排序:直接插入排序
- 数据结构(五)之直接插入排序
- 数据结构与算法---直接插入排序
- 数据结构与算法——直接插入排序
- 数据结构与算法之三直接插入排序
- 数据结构之 直接插入排序
- 数据结构之内部排序--直接插入排序
- 数据结构与算法学习之路:直接插入排序
- 【数据结构之排序2】直接插入排序
- 数据结构之直接插入排序
- 【数据结构与算法】直接插入排序
- 数据结构之排序1(直接插入,冒泡,希尔,选择)
- 数据结构之插入排序--直接插入排序
- 【数据结构】——排序算法——1.1、直接插入排序