关于选择排序和冒泡排序。
请问一下
下面的排序方法是选择排序还是冒泡排序呢?
冒泡排序:
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]);
}
}
}
{
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]);
}
}
}