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

快速排序JAVA实现

时间:2015-03-30 22:30:05      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

package kpp.sort;
/**
 * 快速排序
 * 一般选取首元素为枢轴元素,保存至pivot,确定头尾指针left,right,
 * 先对整个数组元素进行排序,此时枢轴元素两侧元素有序,再分别对枢轴元素两侧的两个数组执行排序
 * 排序规则
 * 1.right指针从右向左遍历,如果比当前枢轴元素pivot小,则将data[right]赋给data[left]
 * 2.left指针从左向右遍历,如果比当前枢轴元素pivot大,则将data[left]赋给data[right]
 * 3.当left和right指针走到一起时,比如index,则将pivot赋给data[index]
 * 
 * @author kpp
 *
 */
public class QuickSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int array[] = {49,38,65,97,176,213,227,49,78,34,12,164,11,18,1};
        quickSort(array, 0, array.length - 1);  
        for (int i = 0; i < array.length; i++) {  
            System.out.print(array[i]+" ");  
        }  
        
    }
    private static int quickSort(int data[],int left,int right){
        
        int pivot;
        if(left < right){
            pivot = sort(data,left,right);
            System.out.println(pivot);
            
            quickSort(data,left,pivot-1);
            quickSort(data,pivot+1,right);
            
        }
        return 0;
    }
    private static int sort(int data[],int left,int right){
        
        int pivot = data[left];
        while(left < right){
            while(left < right&&data[right] >= pivot){
                right--;
            }
            data[left]=data[right];
            
            
            while(left < right&&data[left] <= pivot){
                left++;
            }
            data[right]=data[left];
            
        }
        //left==right时,证明祠堂排序完毕,将枢轴元素赋给data[left]
        data[left] = pivot;
        
        return left;
    }
    
}

 

快速排序JAVA实现

标签:

原文地址:http://www.cnblogs.com/kangpp/p/4379110.html

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