谁能给我讲讲冒泡排序的原理
谁能给我讲讲冒泡排序的原理
[解决办法]
http://baike.baidu.com/view/254413.htm
还不如找本书自己看看呢
[解决办法]
先把数据结构 学学
[解决办法]
网上比较多的,搜索一下就有了
[解决办法]
“冒泡”這個詞本身就是很形象的。冒泡排序,就是若干個泡泡在一個水缸裡,然後他們相互比較。
A:“你有我大個嗎?”
B:“沒有。”
A:“那我得浮在你上面。”
C:“A,瞧你小樣,你還沒我大,在我下面待著吧。”
[解决办法]
int[] array = new int[5] { 1, 4, 2, 5, 3 }; for(int i=1;i< arr.Length;i++){ for(int j=(arr.Length-1);j>=i;j--) { if(arr[j+1]<arr[j]) { int temp= arr[j]; arr[j+1]=arr[j]; arr[j] = temp; } }}
[解决办法]
/// <summary> /// 基本思路:两两比较 /// 排序,按升序排列 /// </summary> /// <param name="str"></param> public static void GetSort(int[] str) { int temp = 0; Console.Write("原数组是:"); for (int i = 0; i < str.Length; i++) { Console.Write(str[i]+"\t"); } Console.WriteLine(); for (int i = 0; i <str.Length; i++) { Console.WriteLine("第{0}轮的排序结果是:",i+1); for (int j = 0; j < str.Length-1-i; j++) //两两比较 没一轮比较都会依次递减比表的次数 { if (str[j] > str[j + 1])//比较相邻的两个数 { temp = str[j]; //把较大的值放入到临时变量里 str[j] = str[j + 1]; //因为是升序 数组第一位放较小值 str[j + 1] = temp; //因为是升序 数组第二位放较大值(即temp) } //打印每次比较的结果 for (int k = 0; k < str.Length; k++) { Console.Write(str[k] + "\t"); } Console.WriteLine(); } Console.WriteLine(); } } /// <summary> /// 降序,按降序排列 /// </summary> /// <param name="str"></param> public static void GetSort1(int[] str) { int temp = 0; for (int i = 0; i < str.Length; i++) //外循环5次 { for (int j = 0; j < str.Length - 1 - i; j++) { if (str[j] < str[j + 1]) //如果前一个小于后一个 { temp = str[j]; //第一个值和它的下一个值比较 把小的就放入到临时变量里 str[j] = str[j + 1]; //把大的这个值放入到它后面 str[j + 1] = temp; //把小的这个值放入到第一位 } //打印每次比较的结果 for (int k = 0; k < str.Length; k++) { Console.Write(str[k] + "\t"); } Console.WriteLine(); } Console.WriteLine(); } }
[解决办法]
http://topic.csdn.net/u/20090113/11/F371C1F2-9330-4B61-B845-00177E6AE953.html
楼主看看这个吧。。。
[解决办法]
/// <summary> /// 基本思路:两两比较 /// 排序,按升序排列 /// </summary> /// <param name="str"></param> public static void GetSort(int[] str) { int temp = 0; Console.Write("原数组是:"); for (int i = 0; i < str.Length; i++) { Console.Write(str[i]+"\t"); } Console.WriteLine(); for (int i = 0; i <str.Length; i++) { Console.WriteLine("第{0}轮的排序结果是:",i+1); for (int j = 0; j < str.Length-1-i; j++) //两两比较 没一轮比较都会依次递减比表的次数 { if (str[j] > str[j + 1])//比较相邻的两个数 { temp = str[j]; //把较大的值放入到临时变量里 str[j] = str[j + 1]; //因为是升序 数组第一位放较小值 str[j + 1] = temp; //因为是升序 数组第二位放较大值(即temp) } //打印每次比较的结果 for (int k = 0; k < str.Length; k++) { Console.Write(str[k] + "\t"); } Console.WriteLine(); } Console.WriteLine(); } } /// <summary> /// 降序,按降序排列 /// </summary> /// <param name="str"></param> public static void GetSort1(int[] str) { int temp = 0; for (int i = 0; i < str.Length; i++) //外循环5次 { for (int j = 0; j < str.Length - 1 - i; j++) { if (str[j] < str[j + 1]) //如果前一个小于后一个 { temp = str[j]; //第一个值和它的下一个值比较 把小的就放入到临时变量里 str[j] = str[j + 1]; //把大的这个值放入到它后面 str[j + 1] = temp; //把小的这个值放入到第一位 } //打印每次比较的结果 for (int k = 0; k < str.Length; k++) { Console.Write(str[k] + "\t"); } Console.WriteLine(); } Console.WriteLine(); } }
[解决办法]
比如,要从小到大排列
原理就是 外层循环 先找出n个数中最小的,放在最左面 。
然后在剩下的n-1数中,再找出最小的,放在左面第2个。
然后在剩下的n-2数中,再找出最小的,放在左面第3个。
。。。。。。
直到最后还剩1个数,他就是最大的,在最右面。
完毕
[解决办法]
以前上体育课排队时,前面矮的后面高的,自己看着调整
[解决办法]
故明思意,就是像冒泡一样
有 n 个数字就要进行 n-1 的查找,如下:
第1 次: 把最大(最小)的数字放在第1位!
第2 次: 把最大(最小)的数字放在第1位!(除前第1位)
第3 次: 把最大(最小)的数字放在第1位!(除前第2位)
...
第n-1次: 把最大(最小)的数字放在第1位!(除前第n-2位)
以下! 谢谢
[解决办法]
冒泡的原理就是指定的数遍历比较其他数,如果符合升序或者降序,交换。
例,升序排列(从小到大)
45218
第一次循环
42158
第二次循环
21458
第三次循环
12458
第四次循环
12458
第五次循环
12458
冒泡排序比较简单,但是刻板,效率低。
[解决办法]
起泡排序的基本思路是:设待排序记录序列中的记录个数为 n。最多作 n-1 趟起泡,i = 1, 2, ?, n-1。在第 i 趟中从后向前,j = n-1, n-2, ?, i,顺次两两比较V[j-1]和V[j]。如果发生逆序,即V[j-1]>V[j],则交换V[j-1]和V[j]。
[解决办法]
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,
这样一趟过去后,最大或最小的数字被交换到了最后一位,
然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子
例子为从小到大排序,
原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循环)
第一次两两比较6 > 2交换(内循环)
交换前状态| 6 | 2 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 6 | 4 | 1 | 5 | 9 |
第二次两两比较,6 > 4交换
交换前状态| 2 | 6 | 4 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 6 | 1 | 5 | 9 |
第三次两两比较,6 > 1交换
交换前状态| 2 | 4 | 6 | 1 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 6 | 5 | 9 |
第四次两两比较,6 > 5交换
交换前状态| 2 | 4 | 1 | 6 | 5 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第五次两两比较,6 < 9不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二趟排序(外循环)
第一次两两比较2 < 4不交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 4 | 1 | 5 | 6 | 9 |
第二次两两比较,4 > 1交换
交换前状态| 2 | 4 | 1 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第四次两两比较,5 < 6不交换
交换前状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
第三趟排序(外循环)
第一次两两比较2 > 1交换
交换后状态| 2 | 1 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第二次两两比较,2 < 4不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第三次两两比较,4 < 5不交换
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
交换后状态| 1 | 2 | 4 | 5 | 6 | 9 |
第四趟排序(外循环)无交换
第五趟排序(外循环)无交换
排序完毕,输出最终结果1 2 4 5 6 9
动态演示