天天一个算法:冒泡排序

说明:冒泡算法是最基础的算法之一,其做用是将一组无序的元素排列为按照必定顺序(升序或者降序)排列的有序列。算法

原理:设置两层for嵌套循环,外层循环为限定循环,内层循环将下标小于外层循环限定长度的两个相邻元素进行比较,若是两个元素的大小顺序为逆序,则交换两个元素。不断重复以上动做,知道外层循环的限定长度等于要比较的序列的总长度为止。到此,整个序列将按照升序或者降序的顺序排列。数组

时间复杂度:冒泡排序由内外两层循环组成。内循环从前向后一次比较各对相邻元素的大小,若有必要则交换逆序的元素对。故在每一轮内循环中,须要扫描和比较n-1对元素,至多须要交换n-1对元素。不管元素的比较仍是元素的交换都属于基本操做,故每一轮内循环至多须要执行2(n-1)次基本操做。外循环至多执行n-1轮。所以,总共须要执行的基本操做不会超过2(n-1)^2次。则该算法的时间复杂度则有T(n)=O(2(n-1)^2)。则该算法的时间复杂度为O(n^2)。code

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();
        }
相关文章
相关标签/搜索