zoukankan      html  css  js  c++  java
  • 经典的排序算法学习(java实现)

    1.算法思想

            通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,

    然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    2.算法图解

      

    3.实现代码

    static void quikSort(int n[], int left, int right){
         int temp; //定义一个临时的变量
         if(left < right){
             temp = partition(n, left, right);//将partition返回的值赋给temp
             quikSort(n, left, temp - 1); //递归调用继续排左边的数
             quikSort(n, temp + 1, right); //递归调用继续排右边的数
         }
     }
     
     
     static int partition(int n[], int left, int right){
         int pivot = n[left]; //取左边的第一个数作为基数
         while(left<right){
         //循环从右向左,指针移动查找第一个小于pivot的数
         while(left < right && n[right] >= pivot){
             right--;
         }
         if(left < right) //找到第一个小于pivot的数后
             n[left++] = n[right];  //将这个数填到n[left]这个位置,left前进一格
             /*上面的if部分简化如下:
             if(left < right){
                 n[left] = n[right];
                 left++; //注意:++运算符的用法:要先赋值,再进行自加
             }
             */
         //循环从左向右,指针移动查找第一个大于pivot的数
         while(left < right && n[left] <= pivot){
             left++;
         }
         if(left < right) //找到第一个大于pivot的数
             n[right--] = n[left]; //将这个数填到n[right]这个位置,right前进一格
        }
        n[left] = pivot; //退出时,i等于j, 将pivot填到这个里,将数分成两部分,左边的数都小于pivot,右边的数都大于pivot
        return left; // 返回该划分位置
        }
  • 相关阅读:
    计算机基础知识
    markdown简介及基本语法
    session和cookie的区别
    MySQL的游标
    数据库单表查询
    外键(有无级联)
    mysql
    数据库引擎
    守护进程和守护线程的区别
    快排等
  • 原文地址:https://www.cnblogs.com/qingcong/p/5826703.html
Copyright © 2011-2022 走看看