前言
C#中常见的排序方法有:冒泡排序,快速排序,插入排序,选择排序、堆排序以及归并排序。虽然都没怎么实践操作过,但是也有耳闻。今天主要讲这里面最常见的冒泡排序。
冒泡排序
【描述】如下图:对于学生科的同学一看就这点,这是个烧杯里面有很多的液体,需要用玻璃棒按照一个方向,均匀的搅拌。而这个图中展示的是泡泡从下到上越来越大,知道到达水面破裂。
【概念】冒泡排序也就是讲一组需要排序的数,进行从小到大,或从大到小的排列。
计算机的排序没有人那么灵活,冒泡排序突出的是顺序:
【例子】如果一组数1 2 3 5 4 要从大到小排列
他要从最左边开始,把第一个数和其他的数都比较一遍,直到没有比它还小的数为止
2 3 5 4 1 第一轮进行了4次比较1和2 3 5 4都比较了一遍
3 5 4 2 1 第二轮进行了3次比较2 和3 5 4 1都比较了一遍
5 4 3 2 1 第三轮进行了2次比较3 和5 4 比较了一遍
最后一轮5 和4 比较了1次 5比4 大没有动
所以:5个数,最多要进行4+3+2+1次比较
for (int j = 1; j <= numArray.Length-1; j++)//冒泡排序方法
{
for (int i = 0; i < numArray.Length - 1; i++)//让下面的for循环执行numArray.Length-1次
{
if (numArray[i + 1] < numArray[i]) //numArray[i]与numArray[i+1]作比较,将大的放在后面
{
int temp = numArray[i];
numArray[i] = numArray[i + 1];
numArray[i + 1] = temp;//实现排序的步骤
}
n++;//计算机总的循环次数
}
优化
for (int j = 1; j <= numArray.Length-1; j++)//冒泡排序方法
{
for (int i = 0; i < numArray.Length - j; i++)//让下面的for循环执行次数减少
{
if (numArray[i + 1] < numArray[i]) //numArray[i]与numArray[i+1]作比较,将大的放在后面
{
int temp = numArray[i];
numArray[i] = numArray[i + 1];
numArray[i + 1] = temp;//实现排序的步骤
}
n++;//计算机总的循环次数
}
或者
for (int j = 1; j <= numArray.Length-1; j++)//冒泡排序方法
{ numArray-=1
for (int i = 0; i < numArray.Length; i++)//让下面的for循环执行次数减少
{
if (numArray[i + 1] < numArray[i]) //numArray[i]与numArray[i+1]作比较,将大的放在后面
{
int temp = numArray[i];
numArray[i] = numArray[i + 1];
numArray[i + 1] = temp;//实现排序的步骤
}
n++;//计算机总的循环次数
}