散分 冒泡排序的小问题 本帖最后由 lenooooo 于 2010-09-02 18:55:24 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void main(String[] args) {int temp;int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };for (int i = 0; i < a.length; i++) {for (int j = i + 1; j < a.length; j++) { //每执行一次内层循环后,对应的a[i]就是从a[i]到最后所以数中最小的一个if (a[i] > a[j]) { // 后面的数小,则交换temp = a[i];a[i] = a[j];a[j] = temp;}}}for (int k = 0; k < a.length; k++) {System.out.print(a[k] + " ");}}} 比如 当i=0时 j=1 此时需要进行a.length-1次循环也就是第一个冒上去了而后冒第二个 因为已经有一个不用比较了 i=1,j=2了,所以进行a.length-2次循环依此类推。 第一种:for(int i=1;i<a.length;i++){ for(int j=0;j<a.length-i;j++){ if(a[j]<a[j+1]){ int temp = a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }思路:外层循环式表示冒泡排序的次数(即要经过几次内次循环去排序),内层循环是去找前a.length-i个数最小的那个数,经过第二个for循环可以使得a[a.length-i-1]这个位置的数为最小的,也就是前a.length-i个数的最后一个数已经有序了。第二种跟第一种类似,只不过外层for循环多了一次,里层for循环少了一次而已第三种:int temp;int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };for (int i = 0; i < a.length; i++) {for (int j = i + 1; j < a.length; j++) {if (a[i] > a[j]) {temp = a[i];a[i] = a[j];a[j] = temp;}}}第三种直接将a[i]与a[i+1]到a[a.length-1]之间的数一一作比较,外层for循环结束一次,就找到了a[i]到a[a.length-1]最小的那个数,然后将其存储到a[i]这个位置。总之,冒泡排序的思想就是让数组中数两两都要碰面去比较大小,去交换位置。 谢谢各位 特别是zxingchao2009的回答 能否做到 监控某个方法的运行时长 用JAVA做一个小型数据库 WSDL文件中的错误,请高手帮忙解决下 HTTP状态404 - 无法找到Servlet action的错误 Hibernate 表连接的的问题 jsp中一个form如何对应2个Action hibernate配置hbm.xml的问题.关系好复杂,晕忽忽的......请前辈帮忙 大家来看看这个uml图是不是正确的画法 高手来救我啊,poi导出excel出错的问题(使用excel模板)! 想学习JBoss的实现。了解底层封装的机制,和大家一起进步。 如何导出数据库? JSP页面向Servlet用session传值,结果为null
public static void main(String[] args) {int temp;
int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) { //每执行一次内层循环后,对应的a[i]就是从a[i]到最后所以数中最小的一个
if (a[i] > a[j]) { // 后面的数小,则交换
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int k = 0; k < a.length; k++) {
System.out.print(a[k] + " ");
}
}
}
也就是第一个冒上去了
而后冒第二个 因为已经有一个不用比较了 i=1,j=2了,所以进行a.length-2次循环
依此类推。
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-i;j++){
if(a[j]<a[j+1]){
int temp = a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
思路:外层循环式表示冒泡排序的次数(即要经过几次内次循环去排序),内层循环是去找前a.length-i个数最小的那个数,经过第二个for循环可以使得a[a.length-i-1]这个位置的数为最小的,也就是前a.length-i个数的最后一个数已经有序了。
第二种跟第一种类似,只不过外层for循环多了一次,里层for循环少了一次而已
第三种:
int temp;
int[] a = { 70, 22, 23, 45, 26, 88, 11, 77 };
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
第三种直接将a[i]与a[i+1]到a[a.length-1]之间的数一一作比较,外层for循环结束一次,就找到了a[i]到a[a.length-1]最小的那个数,然后将其存储到a[i]这个位置。
总之,冒泡排序的思想就是让数组中数两两都要碰面去比较大小,去交换位置。