码迷,mamicode.com
首页 > 编程语言 > 详细

经典的排序算法学习(java实现)

时间:2016-08-31 17:11:21      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

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]; //取左边的第一个数作为基数
     //循环从右向左,指针移动查找第一个小于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前进一格
    //同理简化
    /*
    if(left < right){
        n[right] = n[left];
        right--; //注意--运算符的用法:先赋值,再进行自减
    }
    */
    n[left] = pivot; //退出时,i等于j, 将pivot填到这个里,将数分成两部分,左边的数都小于pivot,右边的数都大于pivot
    return left; // 返回该划分位置
 }

 

经典的排序算法学习(java实现)

标签:

原文地址:http://www.cnblogs.com/qingcong/p/5826703.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!