1:简介:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,由此而得名。
2:基本原理:
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小的数放在前面,大的数??放在后面。即在第一趟:首先比较第一个和第二个数,将小的数放在前面,大的数放在后面。然后比较第二个数和第三个数,将小的数放在前面,将大的数放在后面,如此继续,直到比较最后两个数,将小的数放在前面,大的数放在后面。至此第一趟结束,将最大的数放在了最后。在第二趟:仍从第一对数开始比较(因为可能第二个数和第三个数的交换,使得第一个数不再小于第二个数),将小的数放在前面,将大的数放在后面,一直比较到倒数第二个数(倒数第一的位置已经是最大的了),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数了)。如此下去,重复以上过程,直至最终完成排序。
3:基本算法:
在这里需要提前做一个声明,我们在使用数组存储数据的时候,不从下标0开始,这样呢,可以方便我们一一对应着进行比较,第一个数据的下标就是1。
将待排序的数据存放到一个数组a[1]-a[n]中,我们假设需要将数据按照从小到大的顺序排列。
例如,现在我们需要对数据30,10,20,60,25,40进行排序。
第一趟:
从第一个元素开始到第五个元素依次与其后面相邻的数据进行比较。
1:将第一个数据和第二个数据进行比较,交换后得到:
10,30,20,60,25,40
2:将第二个数据和第三个数据进行比较,交换后得到:
10,20,30,60,25,40
3:将第三个数据和第四个数据进行比较,交换后得到:
10,20,30,60,25,40
4:将第四个数据和第五个数据进行比较,交换后得到:
10,20,30,25,60,40
5:将第五个数据和第六个数据进行比较,交换后得到:
10,20,30,25,40,60
此时,第一趟比较交换结束,最大的数60已经在6号位置了。
第二趟及第N趟就照着第一趟类推,但需要注意:第N次排序后数列倒数第N个数已经是第N大了,所以,每次排序的次数都将减少一次,直到排序次数只剩一次为止,详细的请看代码。
4:代码:
核心代码:
public int[] Pop(int[] listI)
{
//数组为null抛出异常
if (listI == null) throw new ArgumentNullException("listI");
//存储临时的需要冒泡的值
int temp = 0;
//从数组的第一个值遍历到倒数第二个值
for (int i = 0; i < listI.Length - 1; i++)
{
//从比i大1的值开始遍历到结束
//这里比较的总是比i大的值,因为之前的值已经冒泡完成
for (int j = i + 1; j < listI.Length; j++)
{
//如果前一个值大于后一个值,他们交换位置
if (listI[i] > listI[j])
{
//交换位置
temp = listI[i];
listI[i] = listI[j];
listI[j] = temp;
}
}
}
return listI;
}
完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 冒泡排序实验
{
class Program
{
static public int[] Pop_(int[] listI)
{
//数组为null抛出异常
if (listI == null) throw new ArgumentNullException("listI");
//存储临时的需要冒泡的值
int temp = 0;
//从数组的第一个值遍历到倒数第二个值
for (int i = 0; i < listI.Length - 1; i++)
{
//从比i大1的值开始遍历到结束
//这里比较的总是比i大的值,因为之前的值已经冒泡完成
for (int j = i + 1; j < listI.Length; j++)
{
//如果前一个值大于后一个值,他们交换位置
if (listI[i] > listI[j])
{
//交换位置
temp = listI[i];
listI[i] = listI[j];
listI[j] = temp;
}
}
}
return listI;
}
static void Main(string[] args)
{
int[] a = {3,5,23,6,3,77,4,8,5,8,3 };
foreach (int i in Pop_(a))
Console.Write(i.ToString() + ",");
Console.ReadLine();
}
}
}
原文地址:http://blog.csdn.net/imcjysy/article/details/45315889