黑马程序员技术交流社区
标题:
冒泡排序实现的代码思路是什么
[打印本页]
作者:
枫儿
时间:
2013-10-8 18:50
标题:
冒泡排序实现的代码思路是什么
本帖最后由 杨增坤 于 2013-10-8 21:10 编辑
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-x-1; y++)
{
if(arr[y]<arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
swap(arr,y,y+1);
}
}
}
}
复制代码
上面是毕老师的冒泡排序的代码,但是他的思路是对数组进行遍历后比较旁边的角标的值大小,再置换位置吗???那arr.length-1是为何呢???
作者:
Mr.__ㄨīn
时间:
2013-10-8 19:41
冒泡排序的实现方式是:相邻的两个元素比较,如果符合条件则把较大的元素换到右边。而不是角标换位。依次类推。
外循环是控制循环次数的。到最后一个元素之后就没有相邻的元素,所以要减除1。
你可以再把视频看一遍,老师讲到了。
作者:
winsking
时间:
2013-10-8 19:59
本帖最后由 winsking 于 2013-10-8 20:01 编辑
冒泡排序是比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
因为是比较两个相邻的,而最后一个元素后面没有元素了,比到倒数第二个,就是在比较最后两个元素, 所以要减1,否则会角标越界,报错的
作者:
诗化了邂逅
时间:
2013-10-8 20:01
冒泡排序的思路是从头开始比较待排序的元素,在这个过程中依次对相邻元素进行比较,将值大的元素后移。每经过一次排序后,值最大的元素将移到末尾,记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。
arr.length-1是因为对y个元素进行冒泡排序,总共需要进行y-1趟。
作者:
killuakillua898
时间:
2013-10-8 20:38
因为数组的最后一个元素之后就没有相邻的元素,所以要减除1。给你打个比方 12345 5个数 序号是01234
当你遍历之后最后一遍你会发现4之后就没有数了。所以需要数组长度-1
作者:
只想要一盏灯
时间:
2013-10-8 21:20
冒泡排序,其实是相邻两个元素进行比较,如果符合条件两元素就进行位置互换。直到最后一位,就是这组数组的最值。
比如说,一组数组有3个数{5,1,2},我要按 小到大的顺序排序,就是先5和1比较,5比1大,就置换位置,然后相邻的两位继续,就是5和2比,继续置换位置,最后,最右边的数组就是这组数组的最大值。
定义初始值的角标为0,就像你贴出来的这个代码。
然后那个arr.length-1,
第一个for循环里面的-1,不减也可以,因为这个会使得0角标和自己比较,没有意义,你可以自己试着编译一下。
第二个for循环里面的-1必须存在,因为arr.length是数组的长度,是从1开始的,而角标却是从0开始的,你要不减1的话,角标就会越界
作者:
jìng╮煜
时间:
2013-10-8 21:43
气泡在水中上浮.
大数(小数)在数组中往后移动.
前后比较.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2