【Java】五种常见排序之------------------快速排序

原创 2017年03月04日 10:33:50
              • 原理:1.取序列第一个记录为枢纽记录,其关键字为Pivotkey;指针low指向序列第一个位置,指针high
                 * 指向序列最后一个位置;
                 * 2.从high指向的记录开始,向前找到一个关键字的值小于Pivotkey的记录,将其放到low指向的
                 * 位置,low++;
                 * 3.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,
                 * 将其放到high指向的位置,high--;
                 * 4.重复2、3,直到low==high,将枢纽记录放在low(high)指向的位置;
              • 时间复杂度为:O(nlogn)
              • 空间复杂度:O(logn)
              • 代码及原理视图:
代码
package paixu;
/**
 * @author xpengfei
 */
import java.util.Scanner;


/*
 * 快速排序
 * 时间复杂度为O(nlogn)
 * 1.取序列第一个记录为枢纽记录,其关键字为Pivotkey;指针low指向序列第一个位置,指针high
 * 指向序列最后一个位置;
 * 2.从high指向的记录开始,向前找到一个关键字的值小于Pivotkey的记录,将其放到low指向的
 * 位置,low++;
 * 3.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,
 * 将其放到high指向的位置,high--;
 * 4.重复2、3,直到low==high,将枢纽记录放在low(high)指向的位置;
 */
public class sortFive {
private static int[]num;
private static int n;
private static int Pivotkey;
private static int low;
private static int high;
static Scanner input=new Scanner(System.in);
//构造函数,随机生成要排序的数组
public sortFive(){}
public sortFive(int size){
n=size;
num=new int[n];
System.out.println("随机生成的数组为:");
for(int i=0;i<n;i++){
num[i]=(int)(Math.random()*1000);
System.out.print(num[i]+"\t");
}
System.out.println();
}
//数组初始化,手动输入进行数据测试
public void init(){
System.out.println("请输入待排序的数的个数:");
n=input.nextInt();
num=new int[n];
for(int i=0;i<n;i++){
num[i]=input.nextInt();
}
System.out.println("输入的待排序数为:");
for(int i=0;i<n;i++){
System.out.print(num[i]+"\t");
}
System.out.println();
}
//数组排序
public void sort(int low,int high){
int lowborder,highborder;
lowborder=low;
highborder=high;
Pivotkey=num[low];
while(low<high){
while(low<high && Pivotkey<=num[high]){//由high处向前找小于Pivotkey的值,即是步骤2
high--;
}
if(low<high){
num[low]=num[high];
low++;
}
while(low<high && num[low]<=Pivotkey){//由low处向后找大于Pivotkey的值,即是步骤3
low++;
}
if(low<high){
num[high]=num[low];
high--;
}
}
num[low]=Pivotkey;
//对完成一次排序后的数组进行排序
if(lowborder<low-1){
sort(lowborder,low-1);
}
if(high+1<highborder){
sort(high+1,highborder);
}
}
//输出排序后的结果
public void display(){
for(int i=0;i<n;i++){
System.out.print(num[i]+"\t");
}
System.out.println();
}
public static void main(String[] args) {
String choose;
System.out.println("选择排序的数组随机生成还是手动输入?(0:随机生成。    1:手动输入)");
choose=input.nextLine();
while(!choose.equals("0") && !choose.equals("1")){
System.out.println("输入有误,请按照提示选择输入(0:随机生成。    1:手动输入)");
choose=input.nextLine();
}
while(choose.equals("1")){
sortFive sFive=new sortFive();
sFive.init();
sFive.sort(0, n-1);
sFive.display();
System.out.println("选择排序的数组随机生成还是手动输入?(0:随机生成。    1:手动输入        11:退出)");
choose=input.nextLine();
while(!choose.equals("0") && !choose.equals("1") && !choose.equals("11")){
System.out.println("输入有误,请按照提示选择输入(0:随机生成。    1:手动输入           11:退出)");
choose=input.nextLine();
}
if(choose.equals("11")){
break;
}
}
while(choose.equals("0")){
System.out.println("请输入要排序的数组大小:");
n=input.nextInt();
sortFive sFive=new sortFive(n);
sFive.sort(0, n-1);
sFive.display();
System.out.println("选择排序的数组随机生成还是手动输入?(0:随机生成。    1:手动输入        11:退出)");
choose=input.nextLine();
while(!choose.equals("0") && !choose.equals("1") && !choose.equals("11")){
System.out.println("输入有误,请按照提示选择输入(0:随机生成。    1:手动输入           11:退出)");
choose=input.nextLine();
}
if(choose.equals("11")){
break;
}
}
System.out.println("你已退出此程序!");
}
}


            • 附各个排序算法的比较图


版权声明:原创文章,转载请注明出处。

java实现快速排序法_常见内存异常…

快速排序排序算法是大家都认可的算法,顾名思义其实现排序的速度非常快。最坏的情况下,时间复杂度为O(n2),最好情况下为O(nlgn),平均时间复杂度为O(nlgn)。但是其对内存的消耗也非常大,是一种...
  • BonJean
  • BonJean
  • 2014年07月28日 23:42
  • 354

java五种内部排序(直接插入排序、希尔排序、快速排序、堆排序、归并排序)

实现直接插入排序、希尔排序、快速排序、堆排序、归并排序算法;并且输出各种排序算法每一趟排序的结果; 从键盘输入8个整数{ 12 , 45 , 21 , 12 , 30 , 2 , 68 , 33 }...

冒泡归并和快速排序java源码

  • 2016年05月11日 20:30
  • 2KB
  • 下载

Java 快速排序

  • 2012年11月21日 19:35
  • 753B
  • 下载

Java常见排序:(三)快速排序

快速排序是一种非常快的交换排序方法,思路很简单,将待排的数据序列中任意取一个数据作为分界值,所有比这个值小的放在左边,比他大的放在右边。形成左右两个子序列,左边的值都比分界值小,右边的值都比分界大。接...

JAVA实现快速排序

  • 2017年05月23日 21:18
  • 69KB
  • 下载

java实现快速排序小结

  • 2013年04月03日 11:06
  • 59KB
  • 下载

常见的排序算法(Java实现):冒泡、插入、选择、快速排序

常见的排序算法(Java实现):冒泡、插入、选择、快速排序

Java版快速排序法

  • 2012年01月05日 12:20
  • 1KB
  • 下载

[Java--常见排序算法]------冒泡、选择、快速排序

java常用的排序算法(冒泡、选择、快速等)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java】五种常见排序之------------------快速排序
举报原因:
原因补充:

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