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

常见排序算法的java实现

2014-06-08 10:55 357 查看
冒泡排序

排序思想:越大的元素会经由交换慢慢“浮”到数列的顶端



import java.util.*;
public class bubbleSort{
/**
* @冒泡排序
* @author   Weixuan
* @date     2016/04/12
*/
public static void bubblesort(int[] array){

for (int i=0;i<array.length-1;i++){
int temp;
for (int j= 0;j<array.length-1-i;j++){
if (array[i]>array[i+1]){//相邻元素对比
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
}

public static void print(String comment,int[] array){
System.out.print(comment+":");
for (int i:array){
System.out.print(i+" ");
}
System.out.println();
}

public static void main(String[] args) {
int[] array =new int[]{12,345,3,-23,67,23,8,17,123,43};
print("排序前", array);
Arrays.sort(array, 0, array.length);
print("排序后", array);
}

}


快速排序

排序思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列



public class quicksort {

/**
* @快速排序算法   分而治之   递归不断缩小范围
* @author wx
* @date 2016/04/12
*/
public static int quicksort(int[] array,int low,int high){
//第一个元素作为本次快排的中轴进行对比
int temp = array[low];
while(low<high){
//从右到左
while(low <high && array[high]>=temp){
high--;
}
array[low] = array[high];

//从左到右
while(low <high && array[low]<=temp){
low++;
}
array[high] = array[low];
}
array[low] = temp;
return low;

}

public static void _quicksort(int[] array,int low,int high){
//进行一次快排,并获取中轴index
if(low<high){//迭代的临界条件
int middle = quicksort(array,low,high);
_quicksort(array, low, middle-1);
_quicksort(array, middle+1,high);
}

}

public static void sort(int[] array){
//数组不能为空
if(array.length>0){
_quicksort(array,0,array.length-1);
}
}
public static void print(String comment,int[] array){
System.out.print(comment+":");
for (int i:array){
System.out.print(i+" ");
}
System.out.println();
}

public static void main(String[] args) {
int[] array = new int[]{12,345,3,-23,67,23,8,17,123,43};
print("排序前", array);
sort(array);
print("排序后", array);
}

}


归并排序

排序思想:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并



import java.math.*;
public class mergeSort {

/**
* @content  归并排序    两两有序序列进行合并
* @author wx
* @date 2016/04/25
*/

public static void mergeSort(int[] array,int low,int middle,int high){
//声明临时数组存储排序后的序列
int[] temArr = new int[array.length];
int mid = middle+1;
int tempStart = low;
int third = low;
//每次取左右两部分排序中最小值插入temArr
while(low <= middle && mid<=high){
if(array[low]<= array[mid]){
temArr[third++] = array[low++];
}
else{
temArr[third++] = array[mid++];
}
}
//将剩余的有序元素直接插入临时数组中
//左部分序列中剩余元素插入到tempArr中
while(low <= middle){
temArr[third++] = array[low++];
}

//右部分序列中剩余元素插入到tempArr中
while(mid <= high){
temArr[third++] = array[mid++];
}

//把temArr元素移动到正式表
while(tempStart <=high){
array[tempStart] = temArr[tempStart++];
}

}
//待排序序列拆分,排序、合并
public static void _mergeSort(int[] array,int low,int high){
if(low < high){  //迭代的临界条件
int middle =((low+high)/2);
_mergeSort(array,low,middle);
_mergeSort(array, middle+1, high);
mergeSort(array,low,middle,high);
}
}

public static void sort(int[] array,int low,int high){
if(array.length>0){
_mergeSort(array,low,high);
}
}
public static void print(String comment,int[] array){
System.out.print(comment+":");
for (int i:array){
System.out.print(i+" ");
}
System.out.println();
}
public static void main(String[] args) {
int array[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
print("排序前", array);
sort(array, 0, array.length-1);
print("排序后", array);
}

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