zoukankan      html  css  js  c++  java
  • 快速排序

    将一个数组分成两个子数组,子数组1的元素都小于等于v,子数组2的元素都大于等于v,v可取值为数组中的任意元素。

    在分别对子数组进行上述排序,直到子数组的元素个数为1,整个数组排序完成。

    数组切分

    该算法的关键在于数组切分,即选取切分元素v,使子数组1的元素都小于等于v,子数组2的元素都大于等于v。

    以下示例选取数组中的第一个元素a[lo]为切分元素

    实现代码如下:

        public static int partision(int[] a, int lo, int hi) {
    
            
            int i = lo+1;
            int j = hi;
            int v = a[lo];
            while(true) {
    
                // 从左向右扫描,寻找大于v的元素
                while(i<=j && a[i]<=v) i++;
                // 从右向左扫描,寻找小于v的元素
                while(i<=j && a[j]>=v) j--;
    
                // 交换a[i]与a[j]
                if(i<j) {
                    int temp = a[i];
                    a[i] = a[j];
                    a[j] = temp;
                }
                // 若i>=j,扫描完成
                // 交换a[lo]与a[j]
                else {
                    int temp = a[lo];
                    a[lo] = a[j];
                    a[j] = temp;
                    return j;
                }
            }
        }

    递归方法可实现整个快速排序,如下:

        public static void sort(int[] a, int lo, int hi) {
    
            if(hi<=lo) return;
            int j = partision(a, lo, hi);
            sort(a, lo, j-1);
            sort(a, j+1, hi);
        }
    
        public static void sort(int[] a) {
    
            sort(a, 0, a.length-1);
        }
  • 相关阅读:
    Asp.NetCore Web开发之初始文件解析
    Asp.NetCore Web开发之创建项目
    Asp.NetCore Web开发之ADO.Net
    C#中的元组(Tuple)和结构体(struct)
    C#中的扩展方法
    HTTP方法:GET和POST
    Chapter 3准备:基础设施与TA框架
    Chapter 2 全程测试:闪光的思想
    SOAP协议
    接口自动化测试——入门
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8490482.html
Copyright © 2011-2022 走看看