哪位好心人帮我看一下下面的代码。这是用冒泡法对一个数组进行排序的代码,但是得出来的结果和预期的不一样。结果为: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++; 
    19. for(int   i   =   0;   i   <   srcDatas.length;   i   ++){ 
    20. System.out.print(srcDatas[i]   +   "   "); 
    21. } 18. } 
      

  2.   


    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循环中拿出来