排序里面最简单的一种排序就是冒泡排序。冒泡排序,这个名字叫得非常形象,它的意思就是整个排序的过程就好像一个气泡从水底慢慢升起一样。气泡从水底升起的过程,气泡越变越大。所以一次冒泡排序,要么最大的数跑到最顶端去了,要么最小的数跑到最顶端去了。下面的例子中,我们以冒泡排序一次,最小的数跑到顶端去为例。图中左边为顶端,右边为底端。
我们要排序的列表是{5,7,9,2,6,3,1,4,8}。首先来看最简单的一种冒泡排序;
第一步,把第一个数和其他的每一个数进行比较,如果后面的某一个数比第一个数还要小,那么就把后面的那个数与第一个数进行交换,然后继续进行比较。如下面的左图所示,第一个数为5,把5与后面的每个数进行比较,注意当比较到每4步的时候,由于2比5小,所以这个时候5与2要交换位置,那么2就变成了第一个数了,然后就拿2与后面的数据来比较。要明白我们是拿第一个数与剩下的数比较,也就是拿数组a[0]与后面的数进行比较,a[0]的值随时在变化。
第二步,把第二个数(也就是a[1]的值)与后面的数进行比较,如果后面有数比它小,那么也交换位置。经过第一次比较过后,第二个数就是7。那么就拿7与后面的进行比较,在第三次比较的时候,7会与5交换位置,交换后就拿5进行比较。与上面一样,这次是拿a[1]的值进行比较,a[1]的值可能在变。
第三步,第四步,……第N步,同理。
根据上面的思路,冒泡排序的简单实现如下:
public List<int> SimpleBuble(List<int> sortList)
{
for (int i = 0; i < sortList.Count; i++)
{
for (int j = i + 1; j < sortList.Count; j++)
{
if (sortList[i] > sortList[j])
{
int temp = sortList[i];
sortList[i] = sortList[j];
sortList[j] = temp;
}
}
}
return sortList;
}
这是最简单的一种冒泡排序,我们思考一下,这种排序有没有什么问题?思考后我们就会发现,这种排序的方法,第一次冒泡只能把最小的排到前面来,后面的顺序仍然是乱的。也就是说第一次冒泡的结果又第二冒泡时没有一点帮助,很显然这样排序是很低效的。那么我们能不能对这种方法进行改进呢?