package com.ldm.test;
import java.util.Random;
public class BubbleSortTest {
/**
* @param args
*/
public static void main(String[] args) {
BubbleSortTest test = new BubbleSortTest();
// test.bubbleSort(test.creatArray(20), "asc");
// test.selectSort(test.creatArray(20), "desc");
// test.InsertSort(test.creatArray(20), "desc");
test.quickSort(test.creatArray(20), "asc");
test.quickSort(test.creatArray(20), "desc");
}
/**
*
* @param n
* @return
*/
public int[] creatArray(int n) {
Random random = new Random();
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);
}
System.out.println("=========原始序列=======");
printArray(array);
return array;
}
/**
*
* @param data
*/
public void printArray(int[] data) {
for (int i : data) {
System.out.print(i + " ");
}
System.out.println();
}
/**
*
* @param data
* @param x
* @param y
*/
private void swap(int[] data, int x, int y) {
int temp = data[x];
data[x] = data[y];
data[y] = temp;
}
/**
* 冒泡排序
* @param data
* @param sortType
*/
public void bubbleSort(int[] data, String sortType) {
if (sortType.equals("asc")) {
for (int i = 1; i < data.length; i++) {
for (int j = 0; j < data.length - i; j++) {
if (data[j] > data[j + 1]) {
swap(data, j, j + 1);
}
}
}
} else if (sortType.equals("desc")) {
for (int i = 1; i < data.length; i++) {
for (int j = 0; j < data.length - i; j++) {
if (data[j] < data[j + 1]) {
swap(data, j, j + 1);
}
}
}
} else {
System.out.println("您输入的排序类型错误。");
}
printArray(data);
}
/**
* 选择排序
* @param data
* @param sortType
*/
public void selectSort(int[] data, String sortType) {
if (sortType.equals("asc")) {
for (int i = 1; i < data.length; i++) {
int index = 0;
for (int j = 1; j <= data.length - i; j++) {
if (data[j] > data[index]) {
index = j;
}
}
swap(data, index, data.length - i);
}
} else if (sortType.equals("desc")) {
for (int i = 1; i < data.length; i++) {
int index = 0;
for (int j = 1; j <= data.length - i; j++) {
if (data[j] < data[index]) {
index = j;
}
}
swap(data, index, data.length - i);
}
} else {
System.out.println("Error sort type");
}
printArray(data);
}
/**
* 插入排序
* @param data
* @param sortType
*/
public void InsertSort(int[] data,String sortType){
if(sortType.equals("asc")){
for(int i=1;i<data.length;i++){
for(int j=0;j<=i;j++){
if(data[i]<data[j]){
swap(data, i, j);
}
}
}
}else if(sortType.equals("desc")){
for(int i=1;i<data.length;i++){
for(int j=0;j<i;j++){
if(data[i]>data[j]){
swap(data, i, j);
}
}
}
}else{
System.out.println("Error Sort Type");
}
printArray(data);
}
/**
*
* @param data
* @param low
* @param high
*/
private void quickSort_asc(int data[],int low,int high){
int i,j,x;
if(low<high){
i=low;
j=high;
x=data[i];
while(i<j){
//从右往左找比x小的数
while(i<j&&data[j]>x){
j--;
}
if(i<j){
data[i]=data[j];
i++;
}
//从左往右找比x大的数
while(i<j&&data[i]<x){
i++;
}
if(i<j){
data[j]=data[i];
j--;
}
}
data[i]=x;
quickSort_asc(data,low,i-1);
quickSort_asc(data, i+1, high);
}
}
/**
*
* @param data
* @param low
* @param high
*/
private void quickSort_desc(int data[],int low,int high){
int i,j,x;
if(low<high){
i=low;
j=high;
x=data[i];
while(i<j){
//从右往左找比x小的数
while(i<j&&data[j]<x){
j--;
}
if(i<j){
data[i]=data[j];
i++;
}
//从左往右找比x大的数
while(i<j&&data[i]>x){
i++;
}
if(i<j){
data[j]=data[i];
j--;
}
}
data[i]=x;
quickSort_desc(data,low,i-1);
quickSort_desc(data, i+1, high);
}
}
/**
* 快速排序
* @param data
* @param sortType
*/
public void quickSort(int data[],String sortType){
if(sortType.equals("asc")){
quickSort_asc(data, 0, data.length-1);
}else if(sortType.equals("desc")){
quickSort_desc(data, 0, data.length-1);
}else{
System.out.println("Error Sort Type");
}
printArray(data);
}
}