几种基本排序的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"); } }
相关文章推荐
- Java笔记---易混淆的概念(二:线程、进程、任务)
- 《Java程序设计》第一周学习总结
- struts2 拦截器
- LeetCode : Longest Common Prefix [java]
- java二维数组详解
- Maven项目管理:SpringMVC+Mybatis+Velocity整合笔记
- java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Sessio
- Java RMI之HelloWorld篇
- java实现双链表
- 南阳ACM 题目517:最小公倍数 Java版
- 南阳ACM 题目517:最小公倍数 Java版
- leetcode:Single Number 【Java】
- LintCode 木材加工
- ubuntu下 java环境变量的配置
- LeetCode : Roman to Integer [java]
- Java带有返回结果的新线程:Callable
- JAVA泛型详解
- leetcode:Remove Duplicates from Sorted Array 【Java】
- 【Java】ArrayList集合容器
- Java BigInteger的简单使用