问题:假设对含有n个元素的数组进行冒泡排序(从小到大)。
冒泡排序:
//先确定最大值位置
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j] = t;
}
}
}
比较排序:
//先确定最小值位置
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
注:此处和选择排序可不同,选择排序使用标记最值所在位置的方式, 查找最值过程中不移动数位置, 只是在最后将最值置换到顶端.
选择排序
for(i=0;i<n;i++)
{
min = i;
for(j=i+1;j<n;j++)
{
if(a[i]>a[j])
{
min = j;
}
}
//交换
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
以上三种排序是极度相似的,容易弄混需要留意!