首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于取舍排序和冒泡排序

2013-08-09 
关于选择排序和冒泡排序。请问一下下面的排序方法是选择排序还是冒泡排序呢?感觉既不是冒泡排序的标准写法

关于选择排序和冒泡排序。
请问一下
下面的排序方法是选择排序还是冒泡排序呢?

感觉既不是冒泡排序的标准写法也不是选择排序的标准写法。。
谢谢大家!!
[解决办法]
这个怎么看着那么别扭,分不清楚这是什么排序,不过,肯定不是冒泡排序。

冒泡排序:
void BubbleSort(int data[],int len)
{
    for(int i = 0; i < len; ++i)
    {
        for(int j = 0; j < len - i - 1; ++j)
         {
               if(data[j] > data[j+1])
                swap(data[j],data[j+1]);
         }
     }

}

[解决办法]
这好像是两个结合体:

这儿有常见的一些排序方法的实现:可以看一下:
http://blog.csdn.net/zhaoming262350/article/details/8205124


//(2) 冒泡排序
/*
#include <stdio.h>
#define N 100
void voidBubblesort(int data[],int n)
{
int i,j,tag,temp;
for(i=0,tag=1;tag==1&&i<n-1;i++) //控制排的次数,有n个数一共可以排n-1次,
{
tag=0;
for(j=1;j<n-i;j++)//控制在一次排序中,两个数之间的交换排序
if(data[j-1]>data[j])
{
temp=data[j-1];
data[j-1] =data[j];
data[j]=temp;
tag=1;
}
}
}
int main ()
{
int n,i,a[N];
printf("please input an number is N:\n");
scanf("%d",&n);
printf("please input an original a[n]:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
voidBubblesort(a,n);
printf("The sort array a[n]is :\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return 0;
}
*/



//(3)简单的选择排序
/*
#include <stdio.h>
#define N 100
void Selectsort(int data[],int n)


{
int i,j,k,temp;
for(i=0;i<n;i++) //取一个元素记为最小的,与第一个元素交换位置,从而有序
{
k=i;
for(j=i+1;j<n;j++) //从剩下的无序区继续取元素,与第一个位置的元素比较
if(data[j]<data[k])
k=j;
if(k != i) //如果第一个位置不是最小的,则交换这个位置
{
temp =data[i];
data[i]=data[k];
data[k]=temp;
}
}
}
int main ()
{
int i,n,a[N];
printf("input number N is:\n");
scanf("%d",&n);
printf("input original array a[] is:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
Selectsort(a,n);//调用排序方法
printf("The sorted array a[n]  is:\n"); //排序后的元素输出
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return 0;
}

*/
[解决办法]
既不是冒泡,也不是选择。但是和选择有点像,不过效率差不少。
总结:这是我见过的效率最差的排序了,简直就不应该写出来!
[解决办法]
你这个排序是不对的。

你这个理解是:
第一次找出最大的放到最下方,
但是第二次从第二个数字开始向下找更大的数,交换到下方,
但是此时已经把第一个数隔过去了,第一个数不一定是最小的数字。

既不是冒泡法也不是选择。

冒泡排序:
{    for(int i = 0; i < len; ++i)
    {        for(int j = 0; j < len - i - 1; ++j)
         {               if(data[j] > data[j+1]) 
               swap(data[j],data[j+1]);
         }
     } 
}

热点排行