【复习】冒泡排序 ,快速排序。

冒泡排序

每一次循环都是将最大的放在最右边直到循环结束,数组就会变成有序的了

具体实现是使用了两个for循环,第一个for循环选定每一个位置的数字,第二个for循环将每一个位置的数字与它后一位的数字进行对比,如果前一位大于后一位,就交换位置。这样就把大的放在了后面,实现如下。

  public void Maopao(int [] list){
        for (int i = 0; i < list.length; i++) {
            for (int j = i +1 ; j <list.length ; j++) {
                swip(list,i,j);
            }
        }
        for (int i = 0; i < list.length; i++) {
            System.out.println(list[i]);
        }
    }
public void swip(int [] list , int i , int j){
        if(list[i]>list[j]){
            int tmp = list[i] ;
            list[i] = list[j];
            list[j] = tmp;
        }
    }


快速排序

快速排序的思路为,找到一个基准数,分别从两边遍历,来提升效率,并由每一次循环的最后一个基准数,分成左右两个部分,左边比基准数小,右边比基准数大,然后分别对子数列进行同样的操作


实现的代码如下,详细步骤注释写的很清楚。

 public void Sort(int [] sqList , int low , int high){

        //i和j是用来判断区域的临时变量,在递归时,判断是否需要递归。
        int i = low;
        int j = high;
        //tmp是基准数,用来确定替换以及方向的改变的位置
        int tmp = sqList[low];

        while (low<high){
            //先从右往左遍历,找出比基数小的
            while ((low<high) && (sqList[high] >= tmp)){
                high -- ;
            }
            //找到比基数小的了,跳出了循环,然后将基数与比基数小的进行位置调换,
            //然后从调换后的后一位进行遍历
            sqList[low] = sqList[high];
            sqList[high] = tmp;
            low++;
            // 然后改变遍历方向,从左往右,之后从调换后的i的后一位进行遍历;
            while ((low<high) && (sqList[low] <= tmp)){
                low ++;
            }

            //然后判断可能上面的while把low变成大于high,
            // 所以我们要进行判断,如果low<high,而且,
            // tmp小于sqList[low] 就调换一次。然后high--;(从high-1开始)
            if(low < high){
                sqList[high] = sqList[low];
                sqList[low] = tmp;
                high--;
            }
        }
        //前一段
        if(i<low-1){
            Sort(sqList,i,low-1);
        }
        //后一段
        if(low<j){
            Sort(sqList,low,j);
        }


    }

猜你喜欢

转载自blog.csdn.net/qq_40033365/article/details/80193942
今日推荐