美文网首页
快速排序的两种思路,java和python实现

快速排序的两种思路,java和python实现

作者: 甜柚小仙女 | 来源:发表于2019-01-27 12:20 被阅读0次

    java版的就是传统的用low和high两个指针去写

    package smile;
    
    import java.util.Arrays;
    
    public class quickSort {
           public static void main(String args[]) {
               int[] num = {10,2,12,3,5,1,7,8,9,20};
    //         sort(num,0,10);
               int len = num.length;
               quick(num,0,len-1);
               System.out.println(Arrays.toString(num));
           }
    //       public static void sort(int[] nums,int begin,int end) {
    //         int key = nums[begin];
    //         int count=0;
    //         int temp;
    //         for(int i=begin;i<end;i++) {
    //             if(nums[i]<=key) {
    //                 temp = nums[i];
    //                 nums[i] =nums[count];
    //                 nums[count]  = temp;
    //                 count++;
    //             }
    //         }
    //         for(int i=0;i<count;i++) {
    //             System.out.println(nums[i]);
    //         }
    //         System.out.println("满足条件的个数:"+count);
    //         System.out.println("不满足条件的个数:"+(nums.length-count));
    //       }
           
           
    //       快排
    //       分区函数
           public static int divPart(int[] nums,int low,int high) {
               int flag = nums[low];
               while(low<high) {
                   while(low<high&&nums[high]>=flag) {                              
                        --high;
                   }                   
                   nums[low] = nums[high];                                  
                   while(low<high&&nums[low]<=flag) {                           
                        ++low;
                   }              
                   nums[high] = nums[low];                                                              
               }
               nums[low] = flag;  
               return low;
           }
           
    //       递归排序
           public static void quick(int []num,int low,int high) {
               if(low<high) {
                   int middle = divPart(num,low,high);
                   quick(num,low,middle);
                   quick(num,middle+1,high);
               }
           }
           
    }
    

    python不用low,high指针

    # 不用low以及high指针进行快排
    # 分区函数
    def divison(list,start,end):
        # 初始化
        count=1
        key=list[start]
        # 将满足条件的元素放在列表前边
        for i in range(start+1,end+1):
            if list[i]<=key:
                temp = list[i]
                list[i] = list[start+count]
                list[start+count] = temp
                count+=1
        # 将元素前移一位
        for i in range(0,count-1):
            list[start+i] = list[start+i+1]
        # 将key(基准元素)值放在空位上
        list[start+count-1] = key
        # 返回基准元素下标
        return start+count-1
    
    # 递归调用快排算法
    def quick_sort1(list,start,end):
        if start<end:
            index = divison(list,start,end)
            quick_sort1(list,0,index-1)
            quick_sort1(list,index+1,end)
    # 封装
    def quick_sort(list):
        quick_sort1(list,0,len(list)-1)
    
    if __name__ == '__main__':
        list = [1,5,23,-1,6,9,2,3]
        quick_sort(list)
        print(list)
    

    相关文章

      网友评论

          本文标题:快速排序的两种思路,java和python实现

          本文链接:https://www.haomeiwen.com/subject/kapgjqtx.html