快速排序(QuickSort)Java版】的更多相关文章

在网上搜索算法的博客,发现一个比较悲剧的现象非常普遍: 原理讲不清,混乱 啰嗦 图和文对不上 不可用,甚至代码还出错 为了不误人子弟耽误时间,推荐看一些靠谱的资源,如[啊哈!算法]系列: https://www.cnblogs.com/ahalei/p/3568434.html 他是C语言实现,其实都是一样的. 我总结一个清晰不罗嗦版: 原理: 快速排序使用分而治之策略.下面描述递归步骤: 选择一个pivot支点值(在啊哈算法中叫“基准值”).我们将中间元素的值作为支点值,但是它也可以是任何值,…
背景 快速排序,是在上世纪60年代,由美国人东尼·霍尔提出的一种排序方法.这种排序方式,在当时已经是非常快的一种排序了.因此在命名上,才将之称为"快速排序".这个算法是二十世纪的七大算法之一,平均情况下时间复杂度为Ο(nlogn),而且在O(nlogn)的情况下,实际的运算速度都要快于其他同时间复杂度的排序方法. 对东尼·霍尔以及快速排序的提出背景感兴趣的同学,可以看看这篇介绍:http://www.nowamagic.net/librarys/veda/detail/2391 排序思…
网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调.所以整理了这篇文章.如果有不妥之处还请建议.首先先复习一些基础.    1.算法概念.   快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.   2.算法思想.   通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行…
相信大家都知道几种排序算法,比如说冒泡排序,选择排序,插入排序等等,这些个算法都不是很难,自己多多理解理解就能掌握了,而今天我们要谈的就是重头戏就是快速排序. 引用大牛的思想来对排序算法解释一下.(文章链接:http://bubkoo.com/2014/01/12/sort-algorithm/quick-sort/#参考文章) 快速排序是图灵奖得主C. R. A. Hoare 于 1960 年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-Conquer…
public class QuickSortTest{ //比较与交换 private static int partition(int[] source, int low, int hight) { int key = source[low]; while (low < hight) { while (low < hight && source[hight] >= key) { hight --; } source[low] = source[hight]; while…
前几天实现了直接插入排序.冒泡排序和直接选择排序这三个基础排序.今天看了一下冒泡排序的改进算法,快速排序.单独记录一下,后面还有归并和基数排序等 快速排序 1.选择一个支点默认为数组第一个元素及array[start]作为支点,将所有大于支点元素的值放到支点后面,将所有小于支点元素的值放到支点前面,完成一次划分,返回支点的位置index 2.通过一个划分形成两个带排序的序列,[start, index - 1]和[index + 1, end]两个,在执行1直到序列元素只有1个则已经完成排序 具…
一.冒泡排序 1.原理:相邻元素两两比较,大的往后放.第一次完毕,最大值在最大索引处. 即使用相邻的两个元素一次比价,依次将最大的数放到最后. 2.代码: public static void bubbleSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { //外层循环控制轮数 ,一共要比较(arr.length-1)轮 for(int y=0; y<arr.length-1-x; y++) { //外层循环控制每一轮比较的次数,每一轮比…
内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法1.1 插入排序1.2 交换排序(冒泡)1.3 选择排序(简单)2 比较3 补充3.1 快速排序3.2 什么是桶排序3.3 堆排序 1 三种基本排序算法 返回 1.1 插入排序 public static void InsertSort(int[] arrs) { int j; int tmp; for (int i = 1; i < arrs.length; i++) { tmp = arrs[i]; for (j =…
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中“选择”出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插入的元素放…
package com.whw.sortPractice; import java.util.Arrays; public class Sort { /** * 遍历一个数组 * @param sortArray */ public void outputArray(int[] sortArray) { for(int i = 0;i < sortArray.length;i++) { System.out.print(sortArray[i] + " "); } System.…