您的位置:首页 > 编程语言 > Java开发

java 快排和堆排序

2014-06-10 16:59 162 查看
1.  这段时间准备找工作了,所以就从最简单的排序开始看看(以下是java实现的快速排序和堆排序):

注:快排和堆排序都是根据二叉树的原理来加快排序速度的。。。

快排:

public static void initSort(int[] value){      //初始化排序
quickSort(value,0,value.length-1);
show(value);
}

private static void show(int[] value) {
for(int i : value){
System.out.print(i+",");
}
}

public static void quickSort(int[] value,int low,int high){
if(low < high){
int group = groupSort(value,low,high);

quickSort(value, low, group-1);
quickSort(value, group+1, high);
}
}

private static int groupSort(int[] value, int left, int right) {
int x = value[left];
int low = left,high = right;
while(low < high){
while(low<high && value[high]>=x){
high--;
}
if(low<high){
value[low] = value[high];
low++;
}

while(low<high && value[low]<=x){
low++;
}
if(low<high){
value[high] = value[low];
high--;
}
}

value[low] = x;

return low;
}

public static void main(String[] args) {
int[] sort = {5,33,1,7,9,888,25,234321,4325,54,4234,7876};

initSort(sort);
}


堆排序

public static void initHeap(int[] value){
for(int i=(value.length-1)/2; i>=0; i--){
changeSmallHeap(value, i, value.length);
}
}

public static void heapSort(int[] value){
initHeap(value);

for(int i=value.length-1; i>=1; i--){
int b = value[0];
value[0] = value[i];
value[i] = b;
changeSmallHeap(value, 0, i-1);
}
}

public static void changeBigHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;

while(j <= end && !finished){
if(j<end && value[j]<value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}

if(temp >= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}

value[i] = temp;
}

public static void changeSmallHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;

while(j <= end && !finished){
if(j<end && value[j]>value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}

if(temp <= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}

value[i] = temp;
}

private static void show(int[] value) {
for(int i : value){
System.out.print(i+",");
}
}

public static void main(String[] args) {
int[] sort = {5,33,1,7,9,888,25,234321,4325,54,4234,7876};

heapSort(sort);
show(sort);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: