• 快速排序基本思想,递归写法,python和java编写快速排序


    1、基本思想

            快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了。在这不使用代码演示。下面我们来探讨一下快速排序的递归写法思想吧。

            设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

    2、python实现

    # coding:utf-8
    import numpy
    def quickSort(arr,start,end):
    
        if start>end:
            return arr
        left,right = start,end
        base = arr[left]
        while left<right:
            while arr[right]>=base and left<right:
                right -=1
    
            arr[left]=arr[right]
    
            while arr[left]<base and left<right:
                left+=1
    
            arr[right]=arr[left]
        arr[left] = base
        quickSort(arr,start,left-1)
        quickSort(arr,left+1,end)
    
    if __name__=="__main__":
    
        arrs = numpy.random.randint(0,20,(10))
        print(arrs)
        quickSort(arrs,0,len(arrs)-1)
        print(arrs)
    

      

    3、java实现

    private static void quickSort(List<Double> array, int start, int end) {
            if (start>end){
                return;
            }
            int left = start,right = end;
            double base = array.get(left);
    
            while (left<right){
                while (array.get(right)>=base && left<right){
                    right --;
                }
                array.set(left,array.get(right));
                while (array.get(left)<base && left<right){
                    left ++;
                }
               array.set(right,array.get(left));
            }
    
            array.set(left,base);
            quickSort(array,start,left-1);
            quickSort(array,left+1,end);
        }
    

      

    java使用ArrayList来计算快排,也可以使用数组。代码流程差不多。

    4、scala 实现

    package com.dataFrameCz
    
    import scala.collection.mutable.ListBuffer
    
    object quickALG {
    
      def quickSort(arr:ListBuffer[Double],start:Int,end:Int): ListBuffer[Double] = {
    
        if (start >= end) {
          return arr
        }
        var low: Int = start
        var height:Int = end
    
        var base:Double = arr(low)
    
        while (low<height){
          while (low<height & arr(height) >= base){
            height -= 1
          }
          arr(low) = arr(height)
          while (low<height & arr(low)< base){
            low += 1
          }
          arr(height) = arr(low)
        }
        arr(low) = base
        quickSort(arr,start,low-1)
        quickSort(arr,low+1,end)
      }
    
      def main(args: Array[String]): Unit = {
        var ar:ListBuffer[Double] = ListBuffer(1.0,2.0,3.0,4.2,1.0,2.3,3.1)
        quickSort(ar,0,ar.size-1)
        println(ar)
      }
    }
    

      

  • 相关阅读:
    刷水题(四)
    C++如何调试
    刷水题(三)
    刷水题(二)
    虔诚的墓主人(BZOJ1227)(洛谷P2154)解题报告
    同余方程组(EXCRT)(luogu4777)
    数据结构——树状数组详解
    程序自动分析(NOI2015)(洛谷P1955)题解
    小胖的奇偶(Viojs1112)题解
    小胖守皇宫(VIJOS P1144 )题解
  • 原文地址:https://www.cnblogs.com/wuzaipei/p/10843635.html
Copyright © 2020-2023  润新知