zoukankan      html  css  js  c++  java
  • 七大排序算法(下)

    (六)归并排序

    (七)快速排序

    希尔排序相当与直接插入排序的升级,堆排序相当于简单选择排序的升级,而接下来要介绍的快速排序其实是冒泡排序的升级。

    快速排序的基本思想是:每次在待排数组中选定一个基准元素,通过一趟排序,使得位于基准元素右侧的元素均大于此基准元素,基准元素左侧的元素均小于此基准元素。这样再分别对基准元素左右侧的元素分别进行排序,直至排序完成。老规矩,先上代码:

    public void quikSort(int[] array) {
    	qSort(array, 0, array.length - 1);
    }
    
    private void qSort(int[] array, int low, int high) {
    	if (low < high) {
    		int com = partition(array, low, high); //com为选定的基准元素的位置;
    		qSort(array, low, com - 1); //分别对左右序列进行快速排序;
    		qSort(array, com + 1, high);
    	}
    }
    
    private int partition(int[] array, int low, int high) {
    	int temp = array[low]; //每次选第一个元素作为基准元素;
    	while (low < high) {
    		while (low < high && array[high] >= temp)
    			high--;//找到该移动的高位元素(此时基准元素在low处),与基准元素交换(基准元素在high处);
    		swap(array, low, high);
    		while (low < high && array[low] <= temp)
    			low++;//找到该移动低位元素,与基准元素交换(基准元素又回到low处);
    		swap(array, low, high);
    	}
    	return low;
    }
    

    最终,实现了数组的排序。

  • 相关阅读:
    go语言学习---指针
    vscode打开多个窗口配置
    python网页版编辑器jupyter使用教程
    go语言学习---判断链表是否有环
    go语言学习---二分查找
    go语言学习---反转链表
    cvxpy学习---初识&&安装使用
    redis学习---linux源码搭建安装redis
    javaScript中的空值和假值
    nrm是什么?以及nrm的安装与命令
  • 原文地址:https://www.cnblogs.com/torresliang/p/4844368.html
Copyright © 2011-2022 走看看