插入排序

来源:互联网 发布:苹果ios6系统能用软件 编辑:程序博客网 时间:2024/06/06 19:30

插入排序 是一种对原有序列排序的方法,逐步使原序列的有序序列增长

折半插入排序 是在寻找 当前元素的位置时采取了折半查找的方法可怜可怜

#include"stdio.h"#include"stdlib.h"typedef struct SqList{int * elem;int length;int MaxSize;}SqList;void CreatList(SqList &L){L.elem=(int *)malloc(100 * sizeof(int));if(!L.elem)exit(0);else{    L.length = 0;    L.MaxSize = 100;        int i, n;printf("please shu ru yuan su ge shu:\n");scanf("%d", &n);L.length = n;printf("please shu ru yuan su:\n");for(i=1;i<=L.length;i++)scanf("%d", &L.elem[i]);}}void print(SqList L){int i;for(i=1;i<=L.length;i++)printf("%d ", L.elem[i]);printf("\n");}void InsertSort(SqList &L)         //对顺序表L直接插入排序{      int i, j;for(i=2;i<=L.length;++i)if(L.elem[i] < L.elem[i-1]){L.elem[0]=L.elem[i];for(j=i-1;L.elem[j]>L.elem[0];--j)L.elem[j+1] = L.elem[j];L.elem[j+1] = L.elem[0];}}void BInsertSort(SqList &L)       //折半插入排序{      int i, j, low, high, mid;  for(i=2;i<=L.length;++i)  {  L.elem[0] = L.elem[i];  low = 1;  high = i-1;  while(low <= high)  {  mid = (low+high)/2;  if(L.elem[0] < L.elem[mid])  high = mid-1;  else  low = mid+1;  }  for(j=i-1;j>=high+1;--j)  L.elem[j+1] = L.elem[j];          L.elem[high+1] = L.elem[0];  }}int main(){     SqList L; CreatList(L); print(L); //InsertSort(L); BInsertSort(L); print(L); return 0;}


 

 

原创粉丝点击