小弟我这个冒泡和标准的比怎么
我这个冒泡和标准的比如何?
标准的冒泡,我感觉写法上不易理解,我这个冒泡在效率上如何呢?
------解决方案--------------------
你没有考虑序列初始有序的情况。。。
------解决方案--------------------
其实从理论上来说,应该是一个样的。都是O(n^2)的复杂度
不同的是冒泡每次都是把先从头开始把最大的冒到后面去,你的是每次从头开始选择一个最小的弄到头上去。
你这种有点选择排序的味道,而且还写麻烦了。
你可以去看看选择排序。
------解决方案--------------------
呵呵,你这应该不叫冒泡,你这叫沉底算法。别人冒泡是一个极值一个极值不停地浮上去的,你找到极值后就沉在那个地方雷打不动了。应该叫沉底法。
------解决方案--------------------
写一些测试代码测试一下不就知道了吗
#include <stdio.h>
#define SIZE 8
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[i] > a[j])
{
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
int main()
{
int number[SIZE]={95,45,15,78,84,51,24,12};
int i;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d,",number[i]);
}
printf("\n");
}
标准的冒泡,我感觉写法上不易理解,我这个冒泡在效率上如何呢?
------解决方案--------------------
你没有考虑序列初始有序的情况。。。
void BubbleSort(ElementType A[], int n)
{
for(int i=0; i<n-1; ++i)
{
bool flag = false; // 表示本次冒泡是否发生交换的标志
for(int j=n-1; j>i; --j) // 从后往前
{
if(A[j-1] > A[j])
{
flag = true;
// 交换
A[j-1] = A[j-1]^A[j];
A[j] = A[j-1]^A[j];
A[j-1] = A[j-1]^A[j];
}
}
if(flag == false)
return;
}
}
------解决方案--------------------
其实从理论上来说,应该是一个样的。都是O(n^2)的复杂度
不同的是冒泡每次都是把先从头开始把最大的冒到后面去,你的是每次从头开始选择一个最小的弄到头上去。
你这种有点选择排序的味道,而且还写麻烦了。
你可以去看看选择排序。
------解决方案--------------------
呵呵,你这应该不叫冒泡,你这叫沉底算法。别人冒泡是一个极值一个极值不停地浮上去的,你找到极值后就沉在那个地方雷打不动了。应该叫沉底法。
------解决方案--------------------
写一些测试代码测试一下不就知道了吗