java 快排练习

原创 2015年11月18日 16:30:04

快排思路:取一个元素作为key,把数组分成两部分,一部分大于key,一部分小于key,key值在中间。在对前后两部分递归的使用该步骤。

编程思路,取第一做key,从右边找比key小的,进行交换;记录key所在位置,再从左边找比key大的,与key交换。以此反复。

public class QuickSort {



public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = new int[] { 23, 12, 5, 4, 66, 32, 70, 54, 26, 56, 64 };
System.out.println(a.length - 1);
print(a);
System.out.println("++++++++++++++排序前++++++++++++++++");
quickSort(a, 0, a.length - 1);


print(a);
}


public static void quickSort(int[] a, int start, int end) {
int i = start;
int j = end;
int key = a[i];
if (start >= end) {          //递归退出条件。
return;
}


while (i < j) {                       
while (i < j && a[j] > key)  //不加这个判断会出现死循环的。
j--;
swap(a, j, i);

while (i < j && a[i] < key)
i++;

swap(a, j, i);
}

quickSort(a, start, i - 1);
quickSort(a, i + 1, end);
}


private static void print(int[] a) {
for (int i : a) {
System.out.print(i + ",  ");
}
System.out.println();
}

private static void swap(int[] a, int j, int i) {
int x = a[i];
a[i] = a[j];
a[j] = x;
}

}


2016年3月22更新:

今天再写了遍快排,出现几个问题;

1. 忘了递归退出的判断,造成死循环

2.忘了i<j的判断,造成死循环。

快排的java两种实现方式

快排是最基础的几个排序算法之一,今天再来
  • qarkly112649
  • qarkly112649
  • 2014年06月29日 17:24
  • 29385

快排(JAVA实现)

import java.util.Scanner; /** * Created by DELL on 2017/4/22. * 快速排序 */ public class KuaiSuSort ...
  • jane_fast
  • jane_fast
  • 2017年04月23日 12:44
  • 461

java排序之快排

这篇文章来谈谈快排,最近有一种感觉,只要有规律可循的代码,分解成为两部分以后效率就会提高很多。代码思想如下  这个代码写的是快排,快排最主要的思维就是寻找一个分界值,大的放在一边,小的放在一边,然后...
  • justperseve
  • justperseve
  • 2016年04月29日 09:39
  • 4035

Java实现常见的排序算法之快排(快速排序)

快速排序算法是也,笔试面试中常被拿来做为问题,要求写出其实现过程和思想...
  • u011437847
  • u011437847
  • 2016年05月12日 11:03
  • 5528

java实现递归快排和非递归快排

package sort; import java.util.Random; public class QuickSort { public static Random random = new...
  • chenzhichao
  • chenzhichao
  • 2016年05月28日 18:23
  • 604

快排(QuickSort)的java语言的实现

快速排序快排的思想与前面所介绍的归并排序的思想类似,也是采用了分治法 算法思想如下: 第一步:分解,数组arr[l..r]别分为两个子数组arr[l..q-1]和arr[q+1..r],使...
  • u010412719
  • u010412719
  • 2015年05月31日 19:17
  • 1447

用java实现快排

public class Main { public static void swap(int arr[], int low, int high) { int temp;...
  • liushawn520
  • liushawn520
  • 2017年10月11日 18:12
  • 111

快速排序过程、partition应用、三种快排四种优化、Java实现

快速排序过程基本思想是分治的思想,说到分治,就应该想到和递归是分不开的。有些书上会使用关键字比较的表述,有些书上会直接使用记录比较表述,这两种说法是两个维度上的说法。这里序列元素的关键字属于记录的一部...
  • joson793847469
  • joson793847469
  • 2016年10月05日 15:32
  • 2831

STL快排

编写快速排序真不如直接用这个,以前写的容易忘掉,现在存放在这里找起来方便。这个是从小到大排序,从大到小只需要修改类中的xy即可。  #include #include #include using n...
  • jj12345jj198999
  • jj12345jj198999
  • 2011年06月06日 00:26
  • 1673

快排递归和非递归(java)

快速排序递归和非递归版本
  • qq_18952073
  • qq_18952073
  • 2017年12月14日 21:15
  • 25
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 快排练习
举报原因:
原因补充:

(最多只允许输入30个字)