哪位好心人帮我看一下下面的代码。这是用冒泡法对一个数组进行排序的代码,但是得出来的结果和预期的不一样。结果为:2,2,-3,3,3,4,6,7。谁帮我看看这个代码。先谢了!
1. int[] srcDatas = new int[]{6,3,4,2,7,2,-3,3};
2. boolean changePosition = true; // 标志是否交换了数组中元素的位置
3. int comparedTimes = 0; // 标志比较的次数
4. int maxComparedTimes = srcDatas.length - 1; // 标志排序过程中最多可能交换的次数
5.
6. //如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
7. while((comparedTimes < maxComparedTimes) && (changePosition)){
8. for(int i = 0; i < (maxComparedTimes - comparedTimes); i++){
9. changePosition = false;
10. if(srcDatas[i] > srcDatas[i + 1]){
11. int temp = srcDatas[i];
12. srcDatas[i] = srcDatas[i + 1];
13. srcDatas[i + 1] = temp;
14. changePosition = true;
15. }
16. }
17. comparedTimes++;
18. }
19. for(int i = 0; i < srcDatas.length; i ++){
20. System.out.print(srcDatas[i] + " ");
21. }
1. int[] srcDatas = new int[]{6,3,4,2,7,2,-3,3};
2. boolean changePosition = true; // 标志是否交换了数组中元素的位置
3. int comparedTimes = 0; // 标志比较的次数
4. int maxComparedTimes = srcDatas.length - 1; // 标志排序过程中最多可能交换的次数
5.
6. //如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
7. while((comparedTimes < maxComparedTimes) && (changePosition)){
8. for(int i = 0; i < (maxComparedTimes - comparedTimes); i++){
9. changePosition = false;
10. if(srcDatas[i] > srcDatas[i + 1]){
11. int temp = srcDatas[i];
12. srcDatas[i] = srcDatas[i + 1];
13. srcDatas[i + 1] = temp;
14. changePosition = true;
15. }
16. }
17. comparedTimes++;
18. }
19. for(int i = 0; i < srcDatas.length; i ++){
20. System.out.print(srcDatas[i] + " ");
21. }
int[] srcDatas = new int[]{6,3,4,2,7,2,-3,3};
2. boolean changePosition = true; // 标志是否交换了数组中元素的位置
3. int comparedTimes = 0; // 标志比较的次数
4. int maxComparedTimes = srcDatas.length - 1; // 标志排序过程中最多可能交换的次数
5.
6. //如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
7. while((comparedTimes < maxComparedTimes) && (changePosition)){
8. for(int i = 0; i < (maxComparedTimes - comparedTimes); i++){
9. changePosition = false;
10. if(srcDatas[i] > srcDatas[i + 1]){
11. int temp = srcDatas[i];
12. srcDatas[i] = srcDatas[i + 1];
13. srcDatas[i + 1] = temp;
14. changePosition = true;
15. }
16. }
17. comparedTimes++;
19. for(int i = 0; i < srcDatas.length; i ++){
20. System.out.print(srcDatas[i] + " ");
21. } 18. }
class maopao
{
public static void main(String [] args)
{
int [] srcDatas=new int[]{6,3,4,2,7,2,-3,3};
// 标志是否交换了数组中元素的位置
boolean changePosition=true;
// 标志比较的次数
int comparedTimes=0;
// 标志排序过程中最多可能交换的次数
int maxComparedTimes=srcDatas.length-1;
//如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
while((comparedTimes <= maxComparedTimes) && (changePosition))
{
changePosition = false;
for(int i = 0; i < (maxComparedTimes - comparedTimes); i++)
{
if(srcDatas[i] > srcDatas[i + 1])
{
int temp = srcDatas[i];
srcDatas[i] = srcDatas[i + 1];
srcDatas[i + 1] = temp;
changePosition = true;
}
}
comparedTimes++;
}
//打印出排序后的数组
for(int i=0;i<srcDatas.length;i++)
{
System.out.print(srcDatas[i]+" ");
}
}
}
修改了一个地方,将 changePosition = false; 从for循环中拿出来