读书人

关于取舍排序和冒泡排序

发布时间: 2013-08-09 15:16:24 作者: rapoo

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

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

冒泡排序:
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]);
}
}
}

读书人网 >C语言

热点推荐