直接插入排序 Shell(希尔)排序

来源:互联网 发布:孔浩java怎么样 编辑:程序博客网 时间:2024/05/29 04:43

直接插入排序

生成100~999之间的随机数的方法原来没见过,挺有趣的

插入的时候判断条件不要少写

/*        直接插入排序       */#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 10void CreatData(int a[],int n,int low ,int high);void InsertSort(int a[],int n);int main(){int i,data[N];CreatData(data,N,100,999);printf("排序前:\n ");for ( i = 0; i < N; ++i){printf("%d ",data[i] );}printf("\n");InsertSort(data,N);printf("排序后: \n");for ( i = 0; i < N; ++i){printf("%d ",data[i] );}printf("\n");return 0;}void CreatData(int a[],int n ,int low ,int high)                //生成low~high之间的随机数并复制给数组a{int i,k;double d;srand(time(NULL));for (i = 0; i < n; ++i){d = (double)rand()/((double) RAND_MAX+1);k = (int)(d*(high-low+1));a[i] = k + low;}}void InsertSort(int a[],int n){int i,j,temp;for (i = 1; i < n; i++)                    //从无序区头部开始,将其中每个每个元素插入到有序区{temp = a[i];for(j = i-1 ; j >=0 && temp < a[j];j--)        //在有序区查找应插入的位置{a[j+1] = a[j];   //后移一个位置}a[j+1] = temp;      //插入}}

希尔排序

对直接插入排序进行改进   间隔的选择是希尔排序的重要部分

基本思想:

先将要排序的N 个数按间隔gap分成若干组,每组的元素的相差gap,对每组的全部元素进行直接插入排序,然后再用一个较小的间隔重复上述分组和排序,直至间隔为1.

/*        希尔排序       */#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 10void CreatData(int a[],int n,int low ,int high);void ShellSort(int a[],int n);int main(){int i,data[N];CreatData(data,N,100,999);printf("排序前:\n ");for ( i = 0; i < N; ++i){printf("%d ",data[i] );}printf("\n");ShellSort(data,N);printf("排序后: \n");for ( i = 0; i < N; ++i){printf("%d ",data[i] );}printf("\n");return 0;}void CreatData(int a[],int n ,int low ,int high)                //生成low~high之间的随机数并复制给数组a{int i,k;double d;srand(time(NULL));for (i = 0; i < n; ++i){d = (double)rand()/((double) RAND_MAX+1);k = (int)(d*(high-low+1));a[i] = k + low;}}void ShellSort(int a[],int n){int gap,i,j,temp;for(gap = n/2;gap > 0 ; gap/=2)        //初始间隔为 n/2 ,以后每趟间隔缩小一半{for(i = gap ; i< n ;i++){temp = a[i];/* 对一组间隔为gap的元素进行插入排序*/                for(j = i-gap;j>=0&&a[j]>temp; j-=gap){a[j+gap] = a[j];}a[j+gap] = temp;       //插入}}}


0 0
原创粉丝点击