Java常见的几种基本排序方法:冒泡排序、选择排序、插入排序、归并排序、快速排序
提供给大家作为基础掌握!
public class ArraySort {
/*** 冒泡排序
* @param a 要排序的数组
*/
private void bubbleSort(int [] a) {
for(int i=a.length;i>0;i++){
for (int j = 0; j <=i; j++) {
if (a[j-1]>a[j]) {
swap(a,j-1,j);
}
}
}
}
/**
* 选择排序
* @param a 要排序的数组
*/
private void selectSort(int []a) {
for (int i = a.length-1; i > 0; i--) {
int temp=0;
for (int j = 1; j <=i; j++) {
if (a[j]>a[temp]) {
temp=j;
}
}
swap(a,i,temp);
}
}
/**
*插入排序
* @param a 要排序的数组
*/
private void insertSort(int []a) {
for (int i = 1; i < a.length; i++) {
int temp=a[i];
int j;
for (int j1 = i; j1>0 && a[j1-1]>temp; j1--) {
a[j1]=a[j1-1];
a[j1]=temp;
}
}
//a[j1]=temp;
}
/**
* 归并排序
* @param args
*/
private void mergeSort(int []a) {
if (a.length>1) {
mergeSort(a,0,a.length);
}
}
private void mergeSort(int []a,int k,int n) {
if (n<2) {
return;
}
mergeSort(a,k,n/2);
mergeSort(a,k+n/2,n-n/2);
merge(a,k,n);
}
private void merge(int []a,int k,int n) {
int[] temp = new int[n];
int i=0,lo=k,hi=k+n/2;
while (lo<k+n/2 && hi<k+n) {
temp[i++]=(a[lo]<=a[hi]?a[lo++]:a[hi++]);
}
while (lo<k+n/2) {
temp[i++]=a[lo++];
}while (hi<k+n) {
temp[i++]=a[hi++];
}for (int i1 = 0; i1 < n; i1++) {
a[k+i1]=temp[i1];
}
}
/**
* 快速排序
* @param args
*/
private void quickSort(int a[]) {
if (a.length>1) {
quickSort(a,0,a.length);
}
}
private void quickSort(int []a,int k,int n) {
if (n<2) {
return;
}
int pivot =a[k];
int i=k;
int j=k+n;
while (i<j) {
while (i<j) {
while (i+1<k+n && a[++i]<pivot) ;
while (a[--j]>pivot) ;
if (i<j) {
swap(a,i,j);
}
}
swap(a,k,j);
quickSort(a,k,j-k);
quickSort(a,j+1,k+n-j-1);
}
}
private static void swap(int[] a,int i,int j){
if (i==j) {
return;
}
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
@SuppressWarnings("unused")
private static void print(int []a){
if (a!=null) {
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]+"");
}
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={77,44,99,66,33,55,88,22};
print(a);
}
}
如需转载,请经博主同意,并说明出处!