您的位置:首页 > 其它

选择排序和插入排序的区别

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: