冒泡排序
1:原理
以此比较相邻的两个元素,每次比较完毕最大的一个字跑到本轮的末尾。
目的:按从小到大排序。
方法:
假设存在数组:72, 54, 59, 30, 31, 78, 2, 77, 82, 72
第一轮比较相邻两个元素,如果左边元素大于右边元素,则交换。
72和54比较的结果就是,54在前,72在后;
然后72和59比较的结果,59在前,72在后;
以此类推,第一轮比较之后的结果是:54, 59, 30, 31, 72, 2, 77, 78, 72, 82
经过第一轮比较,最大的元素跑到了最后一个,所以第二轮比较,最后一个元素不需要进行比较了。
第二轮还是从索引0和1开始比较,只是不许要比较最后一个了,算法还是一样的。第三轮、第四轮以此类推。
排序之后的结果:2, 30, 31, 54, 59, 72, 72, 77, 78, 82
2:代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 72 }; static void Main(string[] args) { Bubble(); PrintList(); } private static void Test1() { int num = 10000; int sum = 0; for (int i = 0; i <= num; i++) { if (i % 11 == 0) { Console.WriteLine(i.ToString()+","+(i/11).ToString()); sum += i; } } Console.WriteLine(sum.ToString()); } static void Bubble() { int temp = 0; for (int i = list.Count; i > 0; i--) { for (int j = 0; j < i - 1; j++) { if (list[j] > list[j + 1]) { temp = list[j]; list[j] = list[j + 1]; list[j + 1] = temp; } } PrintList(); } } private static void PrintList() { foreach (var item in list) { Console.Write(string.Format("{0} ", item)); } Console.WriteLine(); } } }
3:输出
private static void Bubble2() { //C#中数组是引用类型,C#定义整型数组方式是: //int [] intArray = {1,2,3};或int [] intArray = new int[10]; int[] num={71, 54, 59, 30, 31, 78, 2, 77, 82, 72}; //int []num2 = new int[]{ 72, 54, 59, 30, 31, 78, 2, 77, 82, 72 }; // //升序排列 for (int i = 0; i < num.Length - 1; i++) { for (int j = 0; j < num.Length - 1 - i; j++) //错误的for (int j = i+1; j < num.Length - 1 - i; j++) { if (num[j] > num[j + 1]) { int temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp; } } for (int m = 0; m < num.Length; m++) { Console.Write(string.Format("{0} ", num[m])); } Console.WriteLine(); } }
此法更快
4:时间复杂度
根据时间复杂度的计算原则,冒泡排序为:O(n^2 )
阿里云: www.aliyun.com
华赐软件: www.huacisoft.com
C#开源社区: www.opencsharp.net
清泓美肤苑: 清泓美肤苑
bootstrap权限管理系统: Asp.Net Mvc3 bootstrap权限管理系统