常见排序算法的java实现

来源:互联网 发布:信用卡在淘宝怎么套现 编辑:程序博客网 时间:2024/04/29 16:46

冒泡排序

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

   

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){//进行一次快排,并获取中轴indexif(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;//每次取左右两部分排序中最小值插入temArrwhile(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);}}



0 0
原创粉丝点击