排序 有待补充
来源:互联网 发布:几大网络手机卡对比 编辑:程序博客网 时间:2024/05/29 11:22
1.冒泡排序
冒泡排序重复的走过要排序的数列,一次比较两个相邻的元素,如果顺序错误就调换顺序,重进行直到数列排序完成
两个循环,外层循环控制循环的次数,如m个数需要m-1次外层循环,将最小或最大值一次移到最左或最右边,内层循环控制每次交换的元素,并且将最大最小值移走
int bubble_sort(int *a,int len)
{
int i,j,temp;
1./*for(i=len-1;i>0;i--) //从len-1开始循环
for(j=0;j<=i;j++) j到i时a[i]就为当次排序的最大值
if(a[j]>a[j+1])
{
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}*/
2./*for(i=0;i<len;i++) //从i=0开始
for(j=0;j<len-i;j++) //j从最大值一次减小
if(a[j]>a[j+1])
{
temp=a[j];a[j]=a[j+1];a[j+1]=temp;
} */
return 1;
}
2.选择排序
在所有排序数组元素中先找到最小的,然后放到第一个位置,之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。 所有序列中先找到最小的,然后放到第一个位置。
int select_sort(int *a,int len)
{
int i,j,temp;
for(i=0;i<len;i++)
for(j=i+1;j<len;j++)
if(a[i]>a[j]) //a[i]与a[j]比较不符合排序顺序则交换,每个a[i]都是当次循环的最小值或最大值
{
temp=a[j];a[j]=a[i];a[i]=temp;
}
return 1;
}
3.直接插入排序
基本方法:每一次将一个待排序的元素,插入到前面一组已经排好需的一组元素的适当位置上,直到元素全部插入为止,第i个元素插入时前面第i-1个元素已排好序,第i个元素找到合适的位置时,后面的元素从后往前依次向后移。
int insert_sort(int *a,int len)
{
int i,temp,j;
for(i=1;i<len;i++) //从一开始,第0个元素(只有一个元素)已经排好序
{
temp=a[i]; //第i个元素,前面元素已排好序
j=i-1; //与前一个元素相比较
while(j>=0&&a[j]>temp) //如果前一个元素满足大于比较元素(第i个元素),则前面元素依次往后换
{
a[j+1]=a[j];
j--; //继续与前面元素比较 (最后第i个元素插入时定位到第i个元素顺序的前一个位置)
}
a[j+1]=temp; //则之前的第i个元素插入到适当位置
}
return 1;
}
4.希尔排序
希尔排序是对直接插入排序的改进,实质就是分组插入排序。基本思想是将全部元素分为若干个子序列(由相隔某个增量gap的元素组成,通常由gap=len/2开始),分别进行直接插入排序,然后依次缩减增量。直到增量gap足够小时(最小gap=1),相当于再对全体元素进行一次直接插入排序
算法实现
void shell_sort(int *a,int len)
{
int i,j,temp,gap;//gap为增量,记录每次需要直接插入排序的元素的距离
for(gap=len/2;gap>0;gap=gap/2) //gap通常从len/2开始,最小到1
{
for(i=gap;i<len;i++) //从gap开始插入排序,每次有gap对 数需要插入排序
{
j=i-gap; //接下来就是直接插入排序的原理
temp=a[i];
while(j>=0&&temp<a[j])
{
a[j+gap]=a[j];
j=j-gap;
}
a[j+gap]=temp;
}
}
}
0 0
- 排序 有待补充
- 排序算法 笔记 有待补充
- ff activex ocx 有待补充,有待验证
- Matlab快捷操作(有待补充)
- scanf与gets的区别,有待补充
- vim--常用的命令(有待补充)
- 几个常见的Css样式的写法(有待补充)
- Java中是怎么杀死线程的??(有待补充)
- 在看或已看书单(有待补充)
- xml和json浅析(日后有待补充)
- 电子技术书籍(日本)——有待补充完善
- 关于List<?>集合的排序--有待测试
- JAVA中排序函数(有待改进)
- PHP排序算法补充
- 排序算法--补充
- 极力推荐--不错的delphi 学习网站与论坛---有待补充
- (整理) 爬虫入门教程一、二、三、(第二节有待补充)
- css文件开头需要注意的几点(有待补充)
- POJ 2689 Prime Distance 素数筛法
- Java Lombok @Data @Builder
- 二极管反向恢复时间
- 库函数与系统调用
- 基于AJAX的文件上传显示进度条实现
- 排序 有待补充
- nodejs目录结构设计
- Java--两大数据类型
- getAttribute()、setAttribute()和getParameter()的联系与区别
- 第14周OJ实践 数组逆序
- 领域驱动设计系列文章——浅析VO、DTO、DO、PO的概念、区别和用处
- 网站分析(九)——新兴分析:社交、移动和视频
- 信息熵与二进制--信息论系列
- PHP与MySQL程序设计读书笔记(一)