package com.test.cn;
import java.util.Scanner;
/**
* 快速排序
* 快速排序是一个速度非常快的交换排序算法,她的基本思想很简单,就是从待排序的数据序列中任选一个数据
* 作为分解值,比它小的数据元素放到左边,大的放在右边
* @author Administrator
*
*/
public class sort04 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数组以空格分开:");
String str = scanner.nextLine();
String[] data = str.trim().split("\\s{1,}");//trim 去掉字符串开头和结尾的空格 split \s表示空格 表示用1个以上的空格分割
int []a = new int[data.length];
for(int i=0;i<data.length;i++){
a[i] =Integer.parseInt(data[i]);
}
print(a);
quicksort(a,0,a.length-1);
System.out.println("排序后的数组: ");
print(a);
}
public static void quicksort(int[]data,int start,int end){
if(start>=end){
return;
}
int pivot = data[start];
int i = start+1;
int j = end;
while(true){
while(i<=end &&data[i]<pivot){
i++;
}
while(j>start&&data[j]>pivot){
j--;
}
if(i<j){
int temp = data[i];
data[i]= data[j];
data[j] = temp;
}
else{
break;
}
}
//交换j和分界点的值
int temp = data[start];
data[start]= data[j];
data[j] = temp;
print(data);
//递归左子序列
quicksort(data,start,j-1);
//递归右子序列
quicksort(data,j+1,end);
}
public static void print(int[] data){
for(int i=0;i<data.length;i++){
System.out.print(data[i]+"\t");
}
System.out.println();
}
}
import java.util.Scanner;
/**
* 快速排序
* 快速排序是一个速度非常快的交换排序算法,她的基本思想很简单,就是从待排序的数据序列中任选一个数据
* 作为分解值,比它小的数据元素放到左边,大的放在右边
* @author Administrator
*
*/
public class sort04 {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数组以空格分开:");
String str = scanner.nextLine();
String[] data = str.trim().split("\\s{1,}");//trim 去掉字符串开头和结尾的空格 split \s表示空格 表示用1个以上的空格分割
int []a = new int[data.length];
for(int i=0;i<data.length;i++){
a[i] =Integer.parseInt(data[i]);
}
print(a);
quicksort(a,0,a.length-1);
System.out.println("排序后的数组: ");
print(a);
}
public static void quicksort(int[]data,int start,int end){
if(start>=end){
return;
}
int pivot = data[start];
int i = start+1;
int j = end;
while(true){
while(i<=end &&data[i]<pivot){
i++;
}
while(j>start&&data[j]>pivot){
j--;
}
if(i<j){
int temp = data[i];
data[i]= data[j];
data[j] = temp;
}
else{
break;
}
}
//交换j和分界点的值
int temp = data[start];
data[start]= data[j];
data[j] = temp;
print(data);
//递归左子序列
quicksort(data,start,j-1);
//递归右子序列
quicksort(data,j+1,end);
}
public static void print(int[] data){
for(int i=0;i<data.length;i++){
System.out.print(data[i]+"\t");
}
System.out.println();
}
}