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

常见排序算法(二)

2016-05-14 16:24 501 查看
package com.ztc;

/**
* Created by ztc on 16-5-13.
*/
public class sort {
public static long print(int a[], int n ,int i){
long atime=System.nanoTime();
System.out.print("第"+i + "趟:");
for(int j= 0; j<n; j++){
System.out.print(a[j]+" ");
}
System.out.println();
long btime=System.nanoTime();
return btime-atime;
}

private static int partition(int[] a,int low,int high){
int temp=a[low];
while(low<high){
while(low<high && a[high]>=temp)
high--;
int x=a[low];a[low]=a[high];a[high]=x;
while(low<high && a[low]<=temp)
low++;
int y=a[low];a[low]=a[high];a[high]=y;
}
print(a,a.length,-1);
return low;
}

/**
* 快速排序.
* 基本思想:
* 1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
* 2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
* 3)此时基准元素在其排好序后的正确位置
* 4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
* @param a
* @param low
* @param high
*/
public static void quickSort(int[] a,int low,int high){
if(low<high) {
int x=partition(a, low, high);
quickSort(a,low,x-1);
quickSort(a,x+1,high);
}
}

private static void merge(int[] a,int left,int middle,int right){
int[] b=new int[a.length];
int temp=left;
int siginB=left;
int mid = middle+1; //右边的起始位置
//从两个数组中选择小的加入辅助数组
while(left<=middle && mid<=right){
if(a[left]<a[mid])
b[siginB++]=a[left++];
else
b[siginB++]=a[mid++];
}
//当不对称时,将多的数组剩余的数据加入辅助数组
while(left<=middle)
b[siginB++]=a[left++];
while(mid<=right)
b[siginB++]=a[mid++];
//将辅助数组的数据取出
while(temp<=right){
a[temp]=b[temp++];
}
print(a,a.length,-9);
}

/**
* 归并排序.
* 基本思想:
* 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,
* 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
* @param a
* @param left
* @param right
*/
public static void mergeSort(int[] a,int left,int right){
if(left<right){
int middle=(left+right)/2;
mergeSort(a,left,middle);
mergeSort(a,middle+1,right);
merge(a,left,middle,right);
}
}

public static void main(String[] args){
int[] a=new int[]{6,4,3,1,5,5,2};
int[] b=new int[]{6,4,3,1,5,5,2};

quickSort(a,0,a.length-1);
mergeSort(b,0,b.length-1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  排序算法 java