之前在网易中写过一篇冒泡排序的章:
http://m18713008480.blog.163.com/blog/static/253452025201651172627678/
下面做一个简单的总结:
【冒泡排序基本思想】
对待排序的数组从后往前进行多次扫描,扫描过程中发现相邻的两个数不符合排序规则时,就交换位置。
【排序次数】
分为外层循环i和内层循环j,举例说明,有n个数,进行排序时,要进行i=n-1次外层循环,每次外循环都要进行j=n-i次内循环
【补不足】
以前那样写就表明一定要排n-1次,但是发现如果某次排序后,但还没到最后一次,该数组已经有序,就不需要再次对已有序数组排序了,可直接结束排序,下面是我用C#写的补充之前在此方面的不足的冒泡排序的代码。代码思路是一样的,但是会声明一个标志变量,标识否停止循环的变量。即通过内存空间使用上的增多来使程序的执行效率提升,该方法成为“以空间换取时间”。
【总结】//清空之前排好的数 labNew.Text = ""; for (int i = 0; i < arrNum.Length - 1;i++ )//外层循环 { //标识是否结束循环,true则结束本次扫描 bool flag = false; for (int j = arrNum.Length - 1; j > i; j--)//内层循环 { if (arrNum[j] < arrNum[j - 1])//交换顺序 { flag = true; int temp = arrNum[j]; arrNum[j] = arrNum[j - 1]; arrNum[j - 1] = temp; } } if (flag == false) { goto Finsh; } MessageBox.Show(i.ToString()); } Finsh: //把排好的数显示出来 for (int i = 0; i < arrNum.Length;i++ ) { labNew.Text += arrNum[i] + "、"; } labNew.Text = labNew.Text.Substring(0, labNew.Text.LastIndexOf('、'));
方法总在优化,有优化就有动力。冒泡还有待研究。。。