说明:冒泡算法是最基础的算法之一,其作用是将一组无序的元素排列为按照一定顺序(升序或者降序)排列的有序列。
原理:设置两层for嵌套循环,外层循环为限定循环,内层循环将下标小于外层循环限定长度的两个相邻元素进行比较,如果两个元素的大小顺序为逆序,则交换两个元素。不断重复以上动作,知道外层循环的限定长度等于要比较的序列的总长度为止。到此,整个序列将按照升序或者降序的顺序排列。
时间复杂度:冒泡排序由内外两层循环组成。内循环从前向后一次比较各对相邻元素的大小,如有必要则交换逆序的元素对。故在每一轮内循环中,需要扫描和比较n-1对元素,至多需要交换n-1对元素。无论元素的比较还是元素的交换都属于基本操作,故每一轮内循环至多需要执行2(n-1)次基本操作。外循环至多执行n-1轮。因此,总共需要执行的基本操作不会超过2(n-1)^2次。则该算法的时间复杂度则有T(n)=O(2(n-1)^2)。则该算法的时间复杂度为O(n^2)。
static void Main(string[] args)
{
//任意定义一个数字型数组
int[] array = new int[] {12,34,5,78,23,90,1,23,51,76,64,87,43,25,13};
//升序冒泡排序
for (int i = 0; i < array.Length; i++) {
for (int j = 0; j < i; j++) {
if (array[i] < array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
for (int i = 0; i < array.Length; i++) {
Console.Write(array[i]+"\t");
if (i % 5 == 0) {
Console.Write("\n");
}
}
Console.ReadKey();
}