黑马程序员技术交流社区
标题: 令人蛋疼的排序问题~ [打印本页]
作者: yogaa 时间: 2014-4-15 19:06
标题: 令人蛋疼的排序问题~
对数组{1,8,5,2,4,9,7}进行排序,代码如下:
明明自己模拟过很多遍是能够输出正确结果的,但是输出的结果总是1,2,2,2,4,7,7,,我就想不通了,这哪冒出来的奇葩结果...{:3_54:}
public class SortArray {
public static void Sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp;
temp = arr[j];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
public static void main(String[] args){
int[] arr = {1,8,5,2,4,9,7};
Sort(arr);
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
}
}
输出结果为1,2,2,2,4,7,7,
作者: show_play 时间: 2014-4-15 19:28
- public class ceshidemo {
- public static void Sort(int[] arr) {
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j < arr.length; j++) {
- if (arr[i] > arr[j]) {
- swap(arr, i, j);
- }
- }
- }
- }
- public static void swap(int[] arr, int x, int y) {
- int temp = arr[x];
- arr[x] = arr[y];
- arr[y] = temp;
- }
- public static void show(int[] arr) {
- for (int i = 0; i < arr.length; i++)
- System.out.print(arr[i] + ",");
- }
- public static void main(String[] args) {
- int[] arr = { 1, 8, 5, 2, 4, 9, 7 };
- Sort(arr);
- show(arr);
- }
- }
复制代码
作者: show_play 时间: 2014-4-15 19:32
你的换位置错了,我新写的swap();
还有就是主方法别写太多内容,思路想好,定义方法解决就行。
这貌似就是面向对象思路。指挥他们做事就行了。
作者: yogaa 时间: 2014-4-15 19:37
阿西~找了好长时间都找晕了,原来是这里出错了,- - 郁闷额~
非常感谢啊,要不然还要瞎掰半天了~:victory:
作者: wuhyoung 时间: 2014-4-15 20:58
从楼主书写的代码可以看出,此代码是选择排序。
1.楼主在两次循环的时候都多循环了一次,首先按照分析,外层循环1到arr.length-1次,内层循环是i+1到arr.length的循环。楼主循环都多出了一次。
2.楼主在交换的时候出现了错误。
只需将sort函数改写成。即可:
public static void Sort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if (arr > arr[j]) {
int temp = arr;
arr = arr[j];
arr[j] = temp;
}
}
}
}
作者: 李东梁 时间: 2014-4-16 12:51
一个字母都要命,仔细对比我和你的代码
帮你注释出来了- public class SortArray {
- public static void Sort(int[] arr) {
- for (int i = 0; i < arr.length; i++) {
- for (int j = i; j < arr.length; j++) {
- if (arr[i] > arr[j]) {
- int temp;
- temp = arr[i];//你写的j
- arr[i] = arr[j];
- arr[j] = temp;
- }
- }
- }
- }
- public static void main(String[] args){
- int[] arr = {1,8,5,2,4,9,7};
- Sort(arr);
- for(int i = 0;i<arr.length;i++){
- System.out.print(arr[i]+",");
- }
- }
- }
复制代码
作者: 蔡先苼 时间: 2014-5-5 22:01
你的代码里面判断大小时把两个数颠倒顺序时写错了,应该是
if (arr[i] > arr[j]) {
int temp;
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;}//这三行代码的顺序必须搞清楚,即下个被赋值的数应该是上个赋值给其他变量的数,这样才能 达到调换的效果
作者: 提菩--空 时间: 2014-5-9 18:07
把你的代码修改了下。
public class SortArray {
public static void Sort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp;
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
}
public static void main(String[] args){
int[] arr = {1,8,5,2,4,9,7};
Sort(arr);
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+",");
}
}
}
作者: 蒋大帅 时间: 2014-5-9 19:04
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp判断大小的方式改成这样试一下把
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |