话说都工作一年多了 连一个冒泡排序也写不出来是不是太尬了 要以后面试的时候让我写一个冒泡排序我写不出来 那我就只能在家里吃鸡了。好了言归正传 马上动手 百度冒泡排序 翻出了这篇文章
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。降序排列与升序排列相类似,若a[1]小于a[2]则交换两者的值,否则不变,后面以此类推。 总的来讲,每一轮排序后最大(或最小)的数将移动到数据序列的最后,理论上总共要进行n(n-1)/2次交换。
代码如下:
/// <summary> /// 冒泡排序 /// </summary> /// <param name="arry">要排序的整数数组</param> public static void BubbleSort(this int[] arry) { for (int i = 0; i < arry.Length; i++) { for (int j = 0; j < arry.Length - 1 - i; j++) { //比较相邻的两个元素,如果前面的比后面的大,则交换位置 if (arry[j] > arry[j + 1]) { int temp = arry[j + 1]; arry[j + 1] = arry[j]; arry[j] = temp; } } } }
内容引用:http://blog.csdn.net/sniper007/article/details/53080131
我:%¥%¥%¥#@#%#@#@&
对于我们这些理解能力差的人来说这TM堪比天书啊。算了吧看代码
有点云里雾里的感觉 算了加注释一步一步的来吧
看了这段代码后我有一个问题:
76 和 66 交换后 为什么 98 又和44交换
看了一会儿代码终于搞明白了
因为 交换后数组的改变了
arr[j + 1] = arr[j];
arr[j] = temp;
每次交换后数组也不相同了(我TM真想给自己两巴掌 这么简单的东西居然思考了那么久)
鼓动了半天 终于有点明白了
我的理解:
冒泡排序 第一次套嵌循环 找出数字最大的排到最后面
例如 int[] arr = { 23, 44, 76,66, 98, 11, 3, 9, 7 };
第一次套嵌循环 循环3次后 76 > 66 所以 76和66换顺序 现在的数组为
{ 23, 44, 66,76, 98, 11, 3, 9, 7 }
第四次循环 76<98 第五次循环 98 > 11 所以 98和11换顺序 现在的数组为
{ 23, 44, 66,76, 11, 98, 3, 9, 7 }
第六次套嵌循环
由于 98和11换顺序 所以 98现在的下标就是 第五次11的下标
所以还是 98 和 3比较 依次类推
由于LZ的表达能力实在是太差 只能这样来解释LZ自己理解的东西 如果有误 还望各位大佬指点