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

几种基本排序的java实现

2016-03-05 22:08 459 查看
用java实现一下选择、插入、冒泡、归并、快排、希尔等基本排序算法,用来练练手并加深记忆

package sort;

public class SelectSort {
/**
* 选择排序
* @param a
*/
public static void selectSort(int[] a){
if(a!=null){
for(int i=0;i<a.length;i++){
int min = a[i];
int k = i;
for(int j=i+1;j<a.length;j++){
if(a[j]<min){
min = a[j];
k = j;
}

}
int tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}

/**
* 插入排序
* @param a
*/
public static void insertSort(int[] a){
if(a!=null){
for(int i=1;i<a.length;i++){
int temp = a[i];
int j = i;
if(a[j-1]>temp){
while(j>=1&&a[j-1]>temp){
a[j] = a[j-1];
j--;
}
}
a[j] = temp;
}
}
}

/**
* 冒泡排序
* @param array
*/
public static void BubbleSort(int[] array){
for(int i=0;i<array.length;i++){
for(int j=array.length-1;j>i;j--){
if(array[j-1]>array[j]){
int tmp = array[j];
array[j] = array[j-1];
array[j-1] = tmp;
}
}
}
}

/**
* 归并排序
* @param nums
* @param low
* @param high
* @return
*/
public static int[] mergeSort(int[] nums,int low,int high){
int mid = (low+high)/2;
if(low<high){
mergeSort(nums,low,mid);
mergeSort(nums,mid+1,high);
merge(nums,low,mid,high);
}
return nums;
}

public static void merge(int[] nums,int low,int mid,int high){
int[] temp = new int[high-low+1];
int i = low;
int j = mid+1;
int k = 0;

while(i <= mid && j <= high){
if(nums[i] < nums[j]){
temp[k++] = nums[i++];
}else{
temp[k++] = nums[j++];
}
}

while(i<=mid){
temp[k++] = nums[i++];
}

while(j <= high){
temp[k++] = nums[j++];
}

for(int k2=0;k2<temp.length;k2++){
nums[k2 + low] = temp[k2];
}
}

/**
* 快速排序
* @param array
* @param low
* @param high
*/
public static void sort(int[] array,int low,int high){
int i,j;
int index;
if(low>=high){
return ;
}
i = low;
j = high;
index = array[i];
while(i<j){
while(i<j&&array[j]>=index){
j--;
}
if(i<j)
array[i++] = array[j];
while(i<j&&array[i]<index){
i++;
}
if(i<j)
array[j--] = array[i];
}
array[i] = index;
sort(array,low,i-1);
sort(array,i+1,high);
}

/**
* 快速排序
* @param array
*/
public static void quickSort(int[] array){
sort(array,0,array.length-1);
}

/**
* 希尔排序
* @param array
*/
public static void shellSort(int[] array){
int length = array.length;
int i,j;
int h;
int temp;
for(h=length/2;h>0;h=h/2){
for(i=h;i<length;i++){
temp = array[i];
for(j=i-h;j>=0;j-=h){
if(temp<array[j]){
array[j+h] = array[j];
}
else
break;
}
array[j+h] = temp;
}
}
}

public static void main(String[] args){
int[] a = {5,4,9,8,7,6,0,1,3,2};
mergeSort(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.println(a[i]+" ");
}
System.out.println("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: