冒泡排序
让数组中的元素进行两两比较,第1个与第2个比较,第2个与第3个比较...(第i个与第i+1个比较),经过n(i-1)遍两两比较,,数组中的元素就会按照一定规律由大到小或由小到大排序。
例:从大到小排序,进行两两比较的时候使用小于号“<”,如果第i个元素小于第i+1个元素,则将第i个元素与第i+1个元素的位置互换。
10,20,30,40,50,60,70 原始数据7个元素
20,30,40,50,60,70,10 第1趟 两两比较6次后,1个元素已排好(最小值10排到最后位置)
30,40,50,60,70,20,10 第2趟 两两比较5次后,2个元素已排好(倒数第二小值20排到倒数第二位置)
40,50,60,70,30,20,10 第3趟 两两比较4次后,3个元素已排好(倒数第三小值30排到倒数第三位置)
50,60,70,40,30,20,10 第4趟 两两比较3次后,4个元素已排好(倒数第四小值40排到倒数第四位置)
60,70,50,40,30,20,10 第5趟 两两比较2次后,5个元素已排好(倒数第五小值50排到倒数第五位置)
70,60,50,40,30,20,10 第6趟 两两比较1次后,6个元素已排好(倒数第六小值60排到倒数第六位置)
得出规律:对n个元素进行冒泡排序需要排n-1趟
第t趟比较的次数为:n-t次
代码示例如下:
class Program { static void Main(string[] args) { int[] nums = { 12, 5, 15, 6, 46, 54, 41, 2, 7, 35, 84 }; int n = nums.Length; for (int t = 0; t < n - 1; t++) //对n个元素进行冒泡排序需要排n-1趟 { for (int i = 0; i < n - t - 1; i++) //第t趟比较的次数为:n-t次 { //由于t是由0算起的,所以这里应该是n-(t+1) if (nums[i] < nums[i + 1]) { int tmp = nums[i]; nums[i] = nums[i + 1]; nums[i + 1] = tmp; } } } for (int i = 0; i < n; i++) //输出结果 { Console.Write(nums[i] + " "); } Console.ReadKey(); } } |