快速排序算法

 

   import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.LinkedList;

import java.util.List;

import java.util.Scanner;

 

public class Partition01 {

/**

 * @param args

 */

@SuppressWarnings("unchecked")

public static int data[];

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.print("请输入数组元素的大小:");

String str;

Scanner in = new Scanner(System.in);

int number = in.nextInt();

data=new int[number];

System.out.println("请输入" + number + "个数组元素(每输入一个元素后按回车)");

 

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

for(int i=0;i<number;i++){

try {

str=br.readLine();

data[i]=Integer.parseInt(str);

} catch (IOException e) {

e.printStackTrace();

}

}

System.out.println("=========数组排序前的元素=========");

printInfo();

        QuickSort(0,number-1);

        System.out.println();

System.out.println("=========数组排序后的元素=========");

        printInfo();

}

 //取得基准位置

@SuppressWarnings("unchecked")

public static int getPivotpos( int low, int high) {

int pivotpos = low;

int pivot = data[low];

for (int i = low + 1; i <= high; i++) {  //检测整个序列,进行划分

if (data[i]< pivot) {

pivotpos++;

if (pivotpos != i) {

swap( pivotpos, i);  //小于基准的交换到左侧去

}

}

}

data[low]=data[pivotpos];

data[pivotpos]=pivot;  //将基准元素就位

return pivotpos;  //返回基准元素位置

}

/*

 * 对数组元素进行排序,使各元素按排序码非递减有序,把参加排序的数组元素分成两部分,排在

 * 它左边的元素的排序码都小于它,而右边的都大于或等于它.

 * 

 */

@SuppressWarnings("unchecked")

public static void QuickSort( int left, int right) {

if (left < right) {  //元素序列长度大于1

int pivotpos = getPivotpos( left, right);  //划分

QuickSort( left, pivotpos - 1);   //对左侧的元素施行同样的处理

QuickSort( pivotpos + 1, right);  //对右侧的元素施行同样的处理

}

}

//交换数据

@SuppressWarnings("unchecked")

public static void swap(int i, int j) {

int temp = data[i];

data[i] = data[j];

data[j] = temp;

}

//输出显示数组元素

public static void printInfo(){  

for (int i = 0; i <data.length; i++) {

System.out.print(data[i] + "\t");

}

}

}

posted @ 2011-06-16 16:49  月亮的影子  阅读(288)  评论(0编辑  收藏  举报