直接插入排序 Shell(希尔)排序
2015-06-20 21:04
507 查看
直接插入排序
生成100~999之间的随机数的方法原来没见过,挺有趣的
插入的时候判断条件不要少写
/* 直接插入排序 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void CreatData(int a[],int n,int low ,int high);
void InsertSort(int a[],int n);
int main()
{
int i,data
;
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 10
void CreatData(int a[],int n,int low ,int high);
void ShellSort(int a[],int n);
int main()
{
int i,data
;
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; //插入
}
}
}
生成100~999之间的随机数的方法原来没见过,挺有趣的
插入的时候判断条件不要少写
/* 直接插入排序 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
void CreatData(int a[],int n,int low ,int high);
void InsertSort(int a[],int n);
int main()
{
int i,data
;
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 10
void CreatData(int a[],int n,int low ,int high);
void ShellSort(int a[],int n);
int main()
{
int i,data
;
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; //插入
}
}
}
相关文章推荐
- shell知识点2
- shell知识点
- shell的初始化文件:/etc/profile和/etc/bashrc(bash.bashrc)
- linux系统中关于shell变量$*与$@的区别
- Bash的类型(交互、登录)及其相关配置文件
- shell学习二十一天----重新格式化段落
- shell学习二十天----sort的其他内容以及uniq命令
- centos下shell环境查看实时流量
- 用本机XShell连接VM+Ubuntu
- 30分钟搞定BASH脚本编程!
- mysql 安装后无法登陆mysql的 shell 那mysql>经验:ERROR 1045 (28000): Access denied for user 'root'@'localhost‘
- Powershell目录文件夹管理权限的继承和指定方法
- PowerShell启用winrm失败:拒绝访问 0x80070005 -2147024891
- PowerShell隐藏不显示窗口的多种方法
- 不看后悔的Linux生产服务器Shell脚本分享
- (转载)Bash 中的特殊字符大全
- shell学习十九天----文本块排序
- Bash processing pipeline
- linux shell脚本学习xargs命令使用详解
- shell学习十八天----文本排序