zoukankan      html  css  js  c++  java
  • 快速排序

    day8

    快速排序

    方法:

    1,设置一个基准数,一般是数组(int [] arr)的最左边的那个数,不能仅仅理解为是arr[0];

    2.检索,先从右边开始检索,遇到比基准数小的,就停下来;

    再从左边开始检索,遇到比基准数大的,就停下来;

    3.交换,将左右两边的元素交换

    4.继续检索

    5.当左右两边相遇,就将基准数和相遇位置的元素交换;

    6.结束第一轮排序

    7.继续排基准数左边的数组,然后排右边的数组

     

    下面是实现代码:

    package Sort.Search;

    public class QuitSort2 {
       public static void main(String[] args) {
       int[] arr= {4,5,6,2,9,8,3};

           for (int i = 0; i < arr.length; i++) {
               System.out.print(arr[i] + " ");
          }


           System.out.println();

           quickSort(arr,0,arr.length-1);


           for (int i = 0; i < arr.length; i++) {
               System.out.print(arr[i] + " ");
          }
      }


       public static  void quickSort(int[] arr, int left, int right) {

           if(left > right){ //没有这段会出现下标越界
               return;
          }
          int base = arr[left]; //定义一个基准数,
           int i = left;
           int j = right;




           while(i != j){

               while(i < j &&arr[j] >= base ){//从数组右边开始检索,比基准数大或者相等,则继续从右向左移动
                   j--;                //j从右向左移动
              }

               while(i< j &&arr[i] <= base ){//从数组左边向右开始检索,大于或者小于基准数,则继续向右移动
                   i++;//i从左向右移动
              }
               //当i和j 都停止了循环,说明arr[j]小于基准数,arr[i]大于基准数
               //将arr[i]和arr[j]交换
               int temp = arr[i];
               arr[i] = arr[j];
               arr[j] = temp;


          }
           //当i和j相等时,跳出循环
           //将arr[left]和arr[i]或者arr[j]交换
           arr[left] = arr[i];
           arr[i] = base;

           //第一轮循环结束,经行下一轮排序
           quickSort(arr,j+1,right);//从基数的右边开始排序
           quickSort(arr,left,i-1);//从基数的左边开始排序




      }

    }

    注:

    当时,我写代码时,忘记判断一直出现数组下标越界。希望读者注意

    if(left > right){
                       //没有这段会出现下标越界    
    return;}

     

  • 相关阅读:
    时间及时间戳相互转换
    指针偏移
    C# TreeView模糊查找节点
    Checkedlistbox只能单选不能多选
    获取本机的IP地址
    检测插件是否已注册,注册插件
    知道内存中一个图片的指针IntPtr大小,转换成图片显示
    C# 判断点是否在矩形框内
    C# 从图片中截取一部分图片,并返回所截取的图片
    C# 管道通信 (client —— server)Framework2.0版本也可用
  • 原文地址:https://www.cnblogs.com/stydejava/p/13388798.html
Copyright © 2011-2022 走看看