/**
*
*/
package com;
import org.apache.lucene.document.Field.Index;
/**
* @author 绝影
*
*/
public class Quirtsort {
/*
* 思想:类似分治
* 1.找一个基准元素index
* 2.从前往后依次查找,如果有比基准元素大的元素则和基准元素交换,低位用low来表示,low=0
* 3.从后往前查找,如果有比基准元素小的元素则和基准元素交换,高位用high来表示 high=数据长度-1
* 4.如果low<high,那么循环第2和第3步
*
*/
public static void sort(int a[],int low,int high) {
if(low>high) {
return ;
}
int i=low;//低位
int j=high;//高位
int index=a[i];//基准元素
//从两端向中间扫描
while(i<j) {
while(i<j&&a[j]>=index) {//从后往前查找比基准元素小的元素
j--;
}
if(i<j) {//找到比基准元素小的元素
a[i++]=a[j];//a[j]放置的位置空出来了,从前往后的位置向右移动一个单位(i++)
}
while(i<j&&a[i]<index) {//从前往后查找比基准元素大的元素
i++;
}
if(i<j) {//找到比基准元素大的元素
a[j--]=a[i];//把元素放入到上依次空出来的a[j]位置,从后往前的位置向左移动一个位置j--
}
}
a[i]=index;
sort(a,low,i-1);
sort(a,i+1,high-1);
}
/*
* 打印排序后的元素
*/
public static void print(int a[]) {
for(int i=0;i<a.length;i++) {
System.out.println("元素的值依次是:"+a[i]);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]= {12,23,24,21,32,45,34,25,15,2,13,21,67};
Quirtsort.sort(a,0,a.length-1);
Quirtsort.print(a);
}
}