排序算法——冒泡排序
冒泡排序是最基本的排序算法,面试或者考试的时候,属于初级的算法问题,遇到的情况也是最多的。面试的时候,此类问题一般只需要表述一下思路即可。网络有关资料也很多,就随便写写。
例:有数组n={9,8,7,6,5,4,3,2,1},对此数组按照从小到大的顺序进行排序。
首先进行第一轮的冒泡i=1,冒泡的范围为整个数组的长度length=9
定义一个下标指向第1个位置j=0,从第一个元素9(n[0])开始,与9后面的元素n(1)进行比较,如大于后一位的元素,则进行交换,结果如下:
8,9,7,6,5,4,3,2,1
经过交换后,下标移到第2个位置i=1,下一步从第2个元素n[1]开始,如大于后一个元素n[2],进行交换,结果如下:
8,7,9,6,5,4,3,2,1
以此类推,
j=2时,结果为:8,7,6,9,5,4,3,2,1
j=3时,结果为:8,7,6,5,9,4,3,2,1
j=4时,结果为:8,7,6,5,4,9,3,2,1
j=5时,结果为:8,7,6,5,4,3,9,2,1
j=6时,结果为:8,7,6,5,4,3,2,9,1
j=7时,结果为:8,7,6,5,4,3,2,1,9
当j=7时,9排到了最后一个位置,第一轮的冒泡结束后,集合中最大的数已经到达了最后一位,
因此下一轮的冒泡将不进行最后一个位置的数字的比较,
第二轮冒泡i=2,冒泡的范围缩小为除去最后一位的数字length=9-1=8,即j<length-1(j<8-1)
下标j从第1位开始j=0,比较方式与第一轮相同,同后一位元素进行比较,结果如下:
7,8,6,5,4,3,2,1,9
j=1时,结果为,7,6,8,5,4,3,2,1,9
j=2时,结果为,7,6,5,8,4,3,2,1,9
j=3时,结果为,7,6,5,4,8,3,2,1,9
j=4时,结果为,7,6,5,4,3,8,2,1,9
j=5时,结果为,7,6,5,4,3,2,8,1,9
j=6时,结果为,7,6,5,4,3,2,1,8,9
当进行8轮冒泡后,数组就排序完成了,排序过程如下图中列举
以上的范例列举的是一个交换次数最多的情况,即需要排序的数组完全与结果相反的顺序
第1轮交换次数8次,第2轮交换次数7次...第8轮交换次数1次,总次数=8+7+6+5+4+3+2+1=36
长度为n的数组冒泡排序交换次数最大为:(n-1)n/2
c#代码范例:
static void Main(string[] args) { int[] score = { 9, 8, 7, 6, 5, 4, 3, 2, 1 }; for (int i = 1; i < score.Length; i++) { Console.WriteLine("第" + i + "轮冒泡"); for (int j = 0; j < score.Length - i; j++) { if (score[j] > score[j + 1]) { int temp = score[j]; score[j] = score[j + 1]; score[j + 1] = temp; } Console.Write("j=" + j + "时,结果为:"); for (int index = 0; index < score.Length; index++) { Console.Write(score[index] + ","); } Console.WriteLine(""); } } Console.WriteLine(); }