选择排序和插入排序的区别
2016-02-25 16:56
162 查看
首先来看牛客网的一道笔试题
问这段代码是 选择排序还是插入排序。怎么判断呢,这里先给出结论。
数据交换swap发生在while,for 等循环里面的是 『插入排序』,在循环外的,是『选择排序』。
为什么会有这个结论呢?我们把插入排序和选择排序代码全写出来对比,一看就知道了。
#include<stdio.h>
int swap(int *a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}
/*
选择排序的原理:每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列
中去除该值(具体实现略有区别)。
选择排序的代码如下:
*/
void selection_sort(int a[],int n){
int i,j;
int min;
for(i=0;i<n;++i)
{
min=i;
for(j=i+1;j<n;++j)
{
if(a[j]<a[min])
min=j;
}
if(min!=i)
swap(&a[min],&a[i]);
}
}
/*
插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的
移动数据,空出一个适当的位置,把待插入的元素放到里面去。
插入排序的代码如下:
*/
void insertion_sort(int a[],int n){
int i,j;
for(i=1;i<n;++i)
{
int A=a[i];
j=i-1;
while(j>=0&&a[j]>A)
{
a[j+1]=a[j];
j--;
}
a[j+1]=A;
}
}
int main(int argc, char *argv[])
{
int a[]={5,6,7,1,2,3};
// bubble_sort(a , 6);
//selection_sort(a , 6);
insertion_sort(a, 6);
int i;
for(i=0;i<sizeof(a)/sizeof(int);++i)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
(代码来自 http://blog.csdn.net/wdkirchhoff/article/details/41787145)
相关文章推荐
- PHP之对象遍历
- Double类型精度缺失-19.9变为19.89
- CMake 基本使用方法--写CMakeList.txt,Compile ROS package
- JavaScript定时器详解及实例
- 水晶报表左侧树不显示属性设置
- Maven项目Eclipse启动时报错: java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
- 了解连接安全规则
- ThoughtWorks(中国)程序员读书雷达
- 1091. Acute Stroke (30)
- linux设备驱动归纳总结(五):4.写个简单的LED驱动
- 最简单的基于FFMPEG的视频编码器(YUV编码为H.264)
- css滚动条样式制定 jscrollpane
- 如何注册GitHub
- EF中Linq语句多个查询条件的情况
- 魏昊卿——《Linux内核分析》第一周作业:从分析简单的汇编代码了解计算机是怎样工作的
- Longest Common Prefix
- 支付宝没有优势了,五大银行宣布今起手机银行转账汇款免收手续费
- 云盘同步本地文件和QQ聊天记录
- 手动将JAR 包添加到 Maven 的本地仓库
- 微软收购跨平台移动应用开发商Xamarin