C语言常见的几个排序
来源:互联网 发布:茅台迎宾酒淘宝店 编辑:程序博客网 时间:2024/06/06 13:06
#include "stdio.h"
void insersoft(int ch[],int len) //插入排序
{
int i,j,temp;
for(i = 1; i < len; i++)
{
temp = ch[i];
j = i-1;
while(j>=0 && temp<ch[j])
{
ch[j+1] = ch[j];
ch[j] = temp;
j--;
}
}
}
{
int i,j,temp;
for(i = 1; i < len; i++)
{
temp = ch[i];
j = i-1;
while(j>=0 && temp<ch[j])
{
ch[j+1] = ch[j];
ch[j] = temp;
j--;
}
}
}
void half_soft(int ch[],int len) //二分法排序
{
int low=0;
int high ;
int mid,i,j,temp;
for(i = 1; i < len; i++) //一个一个的插入
{
low = 0;
high = i-1;
temp = ch[i]; //找到要插入的位置low
while(low <= high)
{
mid = (low +high)/2;
if(temp > ch[mid])
low = mid +1;
else
high = mid -1;
}
for(j = i-1; j >=low; j--)
{
ch[j+1] = ch[j]; //往后挪一个位置
}
ch[low] = temp;
}
}
{
int low=0;
int high ;
int mid,i,j,temp;
for(i = 1; i < len; i++) //一个一个的插入
{
low = 0;
high = i-1;
temp = ch[i]; //找到要插入的位置low
while(low <= high)
{
mid = (low +high)/2;
if(temp > ch[mid])
low = mid +1;
else
high = mid -1;
}
for(j = i-1; j >=low; j--)
{
ch[j+1] = ch[j]; //往后挪一个位置
}
ch[low] = temp;
}
}
void selectsoft(int ch[], int len) //选择排序
{
int i,j,temp;
for(i = 0; i < len-1; i++)
for(j = i+1; j < len; j++)
{
if(ch[i] > ch[j]) //选择小的数据往前放
{
temp = ch[j];
ch[j] = ch[i];
ch[i] = temp;
}
}
}
void maopaosoft(int ch[], int len) //冒泡排序
{
int i,j,temp;
for(i = 0; i < len; i++)
for(j= 0; j < len-i-1; j++)
{
if(ch[j] > ch[j+1]) //选择大的数据往后放
{
temp = ch[j];
ch[j] = ch[j+1];
ch[j+1] = temp;
}
}
}
//快速排序方法1
void quicksoft(int ch[], int low, int high) //快速排序
{
int i,j,temp;
i = low;
j = high;
temp = ch[low]; // 暂时作为基准点
while(i < j)
{
while((i < j) && (temp < ch[j])) //在右边的只要比基点的大仍在右边
{
j--; //向前移一位
}
if(i < j) //出现比基准点小的数,替换基准点的数
{
ch[i] = ch[j];
i++; //右移一位
}
while((i < j) && (temp > ch[i])) //在左边的只要比基点的小仍在左边
{
i++; //右移一位
}
if(i < j) //出现比基准点大的数,填入原先比基点小的数的位置即j
{
ch[j] = ch[i];
j--;
}
}
ch[i] = temp;
void quicksoft(int ch[], int low, int high) //快速排序
{
int i,j,temp;
i = low;
j = high;
temp = ch[low]; // 暂时作为基准点
while(i < j)
{
while((i < j) && (temp < ch[j])) //在右边的只要比基点的大仍在右边
{
j--; //向前移一位
}
if(i < j) //出现比基准点小的数,替换基准点的数
{
ch[i] = ch[j];
i++; //右移一位
}
while((i < j) && (temp > ch[i])) //在左边的只要比基点的小仍在左边
{
i++; //右移一位
}
if(i < j) //出现比基准点大的数,填入原先比基点小的数的位置即j
{
ch[j] = ch[i];
j--;
}
}
ch[i] = temp;
if(low < i-1)
{
quicksoft(ch,low,i-1); //前半部分在做快速排序
}
if(j+1 < high)
{
quicksoft(ch,i+1,high); //后半部分在做快速排序
}
}
{
quicksoft(ch,low,i-1); //前半部分在做快速排序
}
if(j+1 < high)
{
quicksoft(ch,i+1,high); //后半部分在做快速排序
}
}
//快速排序方法2
void quick_soft(int ch[], int left, int right)
{
int pos,temp,swap;
int i = 0;
pos = left;
temp = ch[pos];
void quick_soft(int ch[], int left, int right)
{
int pos,temp,swap;
int i = 0;
pos = left;
temp = ch[pos];
for(i = 1; i <= right; i++)
{
if(ch[i] < temp)
{
pos++;
swap = ch[pos];
ch[pos] = ch[i];
ch[i] = swap;
}
}
swap = ch[pos];
ch[pos] = ch[0];
ch[0] = swap;
{
if(ch[i] < temp)
{
pos++;
swap = ch[pos];
ch[pos] = ch[i];
ch[i] = swap;
}
}
swap = ch[pos];
ch[pos] = ch[0];
ch[0] = swap;
if(left < pos-1)
{
quick_soft(ch,left,pos-1); //前半部分在做快速排序
}
if(pos+1 < right)
{
quick_soft(ch,pos+1,right); //后半部分在做快速排序
}
}
{
quick_soft(ch,left,pos-1); //前半部分在做快速排序
}
if(pos+1 < right)
{
quick_soft(ch,pos+1,right); //后半部分在做快速排序
}
}
void shell_soft(int ch[], int len) //希尔排序
{
int h,j,k,temp;
for(h = len/2; h > 0; h = h/2) //控制增量
{
for(j = h; j < len;j++) //相当于分组
{
temp = ch[j];
for(k = j-h;(k>=0 && temp < ch[k]); k -= h) //对分组的数据进行排序
{
ch[k+h] = ch[k];
}
ch[k+h] = temp; //这里k=k-h 就是交换
}
}
}
void main()
{
int ch[10];
int i,num,temp,l;
puts("输入多少个数字:");
scanf("%d",&num);
puts("请输入一组数字:");
for(i = 0; i <num; i++)
{
scanf("%d",&ch[i]);
}
//insersoft(ch,num);
//half_soft(ch,num);
//selectsoft(ch,num);
//maopaosoft(ch,num);
//quicksoft(ch,0,num-1);
//shell_soft(ch,num);
quick_soft(ch,0,num-1);
puts("排序结果为:");
for(i = 0; i <num; i++)
{
printf("%5d",ch[i]);
}
printf("\n");
}
0
上一篇:const注意的几个事项
下一篇:拷贝构造函数遇到指针的问题
相关热门文章
- 网店不信用的时辰若何去营销推...
- 教你多少招不花钱做网店推广的...
- C++函数中那些不可以被声明为...
- 字节对齐1
- 农残检测仪:食品安全问题都是...
- test123
- 编写安全代码——小心有符号数...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- sql relay的c++接口
- ChinaUnix & ITPUB社区12周年...
- ssh连接出现以下提示,求解...
- 如何扩展MYSQL
- 准备做一个大型门户,用户什么...
- gbk or utf8
给主人留下些什么吧!~~
评论热议
- C语言常见的几个排序
- 用C语言实现常见的几个排序方法
- c语言中几个常见排序
- C语言的几个常见冷知识
- 常见的C语言排序总结
- C语言常见的一些排序算法
- 常见排序的C语言实现
- C语言常见的排序算法
- 几个常见的C语言面试题分析
- c语言中常见的几个段错误
- CRC16常见几个标准的算法及C语言实现
- C语言几个排序算法
- 常见排序算法的C语言实现之堆排序
- C语言常见排序算法
- C语言常见排序算法
- C语言常见排序算法
- 常见排序c语言实现
- c语言常见排序算法
- 通过NFS挂载使LINUX挂载到S3C2440开发板
- 教你如何将ARM的代码直接拷到驱动程序中
- 按键中断的驱动代码
- 嵌入式C语言面试题
- const注意的几个事项
- C语言常见的几个排序
- 拷贝构造函数遇到指针的问题
- Linux初学笔记
- UNIX下c语言的图形编程
- Qt资料下载网站
- Qt实现大图片快速缩小的算法
- QtEmbedded软键盘输入法实战
- Qt/e输入法程序设计指南
- 独显+集显设置三个显示器输出,其中两个副屏输出相同
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
邯郸市恋家网
邯郸恋家
邯郸恋家网新楼盘
恋家装饰
恋家在线
恋家家居
恋家旗舰店
恋家旅店
恋家的人
恋家租房
不恋家的男人
链家中介费多少
链家 租房
链家自如网
链家地产租房
链家电话
连家
链家公司
二手房链家地产
链家二手房
链家租房网
lianjia
链家二手房中介费
邯郸房地产
链家租房网站
连家二手房
邯郸楼盘
邯郸地产
邯郸房价
邯郸信息港房产
链家地产怎么样
邯郸房产在售楼盘
邯郸市房价
邯郸房
邯郸信息港首页
邯郸信息港
邯郸房产
链家租房中介费
连家网
链家房地产经纪有限公司
链家地产租房网