快速排序的java实现(key的位置可任取)

 1 /**
 2  * @author 黄志伟
 3  */
 4 public class QuickSort {
 5     public static void main(String[] args) {
 6         int [] array = {49,38,65,97,76,13,13,27,4,8,2,3,56};
 7         quickSort(array, 0, array.length - 1);
 8         for (int i = 0; i < array.length; i++) {
 9             System.out.println(array[i]);
10         }
11     }
12
13     /**
14      * @param nums 要递归处理的数组
15      * @param left 左边界 begin 0
16      * @param right 右边界 end length-1
17      */
18     private static void quickSort(int[] nums,int left,int right){
19         int x = (left+right)/2;
20         int key = nums[x];
21         int i = left;
22         int j = right;
23         int index = x;
24         //如果长度为一或越界则不需要处理
25         if(left >= right) return;
26         while(i < j){
27             //左边跳过>=key的一切值
28             while(i < j && nums[j] >= key){
29                 j--;
30             }
31             //右边跳过<key的一切值
32             while(i < j && nums[i] < key){
33                 i++;
34             }
35             //使用index来保存key值所在的数组下标
36             //x的对应值只会不对换或对换一次
37             if(i == x && i != j){
38                 index = j;
39             }
40             if(j == x && i != j){
41                 index = i;
42             }
43             //交换i、j的对应值
44             int tmp = nums[i];
45             nums[i] = nums[j];
46             nums[j] = tmp;
47         }
48         //判断i == j(边界)处的值大于还是小于0,划分到不同的地方
49         if(nums[i] < key){
50            ++i;
51         }
52         int temp = nums[i];
53         nums[i] = nums[index];
54         nums[index] = temp;
55         quickSort(nums,left,i-1);
56         quickSort(nums,i+1,right);
57     }
58 }
时间: 2024-07-28 22:45:04

快速排序的java实现(key的位置可任取)的相关文章

快速排序的Java实现

快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 下面是快速排序的Java实现: package com.newtouch.data.sort; import com.newtouch.data.test.SortTes

【JAVA系列】Google爬虫如何抓取JavaScript的?

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]Google爬虫如何抓取JavaScript的? 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 我们测试了谷歌爬虫是如何抓取 JavaScript,下面就是我们从中学习到的知识. 认为 Google 不能处理 JavaScript ?再想想吧.Audette Audette 分享了一系列测试结果,他

交换排序(冒泡排序、快速排序)——Java

交换排序 (1)冒泡排序 1.基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 2.实例 3.java实现 public static void main(String[] args) { int []nums={57,68,59,52}; bubblesort1(nums); } /** * 它重复地遍历过要排序的数列,一次比较两个元素

算法笔记_015:快速排序(Java)

目录 1 问题描述 2 解决方案 2.1 快速排序原理简介 2.2 具体编码 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列. 2 解决方案 2.1 快速排序原理简介 引用自百度百科: 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行

关于快速排序的Java代码实现

快速排序(Quicksort)是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 实现方式一: 1 package test1; 2 3 public class QuicSort { 4 /* 5 * 使用快速排序 6 * arras:要排序的数组 7 * low:数组的开始下标 8 * hight:数组的

快速排序算法--java

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置.递归快速排序,将其他n-1个元素也调整到排序后的正确位置.最后每个元素都是在排序后的正 确位置,排序完成.所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归. 举例说明一下吧,这个可能不是太好理解.假设要排序的序列为 2 2 4 9 3 6 7 1 

快速排序(Java版)

package com.love.test; import java.util.Scanner; /** * @author huowolf *快速排序实现 *快排是十分优秀的排序算法. *核心:分治法(1.选基元2.分区3.递归子列) */ public class QuickSort { public static void quickSort(int[] arr,int start ,int end) { if(start<end) { int i=start, j=end, x=arr[

排序算法入门之快速排序(java实现)

快速排序也是一种分治的排序算法.快速排序和归并排序是互补的:归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序,会需要一个额外的数组:而快速排序的排序方式是当两个子数组都有序时,整个数组就自然有序了,快速排序可以不产生额外的数组. 对于小数组(N<=20),快速排序不如插入排序.所以,小数组建议使用其他排序. 快速排序可以由以下几步组成: 1.如果数组S中的元素个数是0或1,则返回. 2.取S中任一元素v,称为枢纽元. 3.将S中其余元素(除枢纽元)分为两部分,一部分是小

冒泡、插入、归并、堆排序、快速排序的Java实现代码

详细课程就不表了,看代码吧 1 import java.util.Arrays; 2 3 public class Sort { 4 5 6 static int swapTimes=0; 7 public static void main(String[] args) { 8 int[] numbers = { 7, 6, 5, 3, 1, 8, 9, 7, 1, 2 ,5}; 9 //*** BubbleSort Test *** 10 //bubbleSort(numbers); 11 1