算法总结

来源:互联网 发布:java main函数 多线程 编辑:程序博客网 时间:2024/05/29 04:32
package sort;/** * 排序算法实现 * @author tangxing * */public class Sort {/** * 冒泡排序 * @param a */public static void bubbleSort(int[] a){for(int i=0;i<a.length-1;i++){for(int j=0;j<a.length-i-1;j++){if(a[j]>a[j+1]){int temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}}}/** * 快速排序, * 思想:分治法,选取一个基准元素,一趟排序之后分为两组,一组中的所有元素比基准元素小,另一组中的所有元素比基准元素大,然后用递归将两组中的元素继续排序 * @param a * @param low * @param high */public static void quickSort(int[] a,int low,int high){if(low >= high){return;}int index = partition(a,low,high);quickSort(a,low,index-1);quickSort(a,index+1,high);}/** * 快排的partition函数 * @param a * @param begin * @param end * @return */public static int partition(int[] a,int begin,int end){int base = a[begin];//取数组中第一位为基准元素int low = begin;int high = end;while(low < high){//从右向左开始扫描while(low<high && base<a[high]){high--;}a[low] = a[high];//从左向右开始扫描while(low<high && base>a[low]){low++;}a[high] = a[low];}a[low] = base;//将基准元素放到中间位置return low;//返回中间位置的索引}/** * 归并算法 * @param a * @param first * @param last * @param tmp */    public static void mergeSort(int a[],int first,int last,int tmp[]){        if(first<last){            int mid=(first+last)/2;            mergeSort(a, first, mid, tmp);//左边有序            mergeSort(a, mid+1, last, tmp);//右边有序            merge(a, first, mid, last, tmp);//合并        }    }    //将有序数组a[first..mid] a[mid+1,last]合并    public static void merge(int a[],int first,int mid,int last,int tmp[]){        int i=first;//前一个数组的开始下标        int j=mid+1;//后一个数组的开始下标        int m=mid;//前一个数组的最后下标        int n=last;//后一个数组的最后下标        int k=0;//存放临时数组到tmp        while(i<=m&&j<=n){            if(a[i]<=a[j]){                tmp[k++]=a[i];                i++;            }else {                tmp[k++]=a[j];                j++;            }        }        while(i<=m){            tmp[k++]=a[i++];        }        while(j<=n){            tmp[k++]=a[j++];        }        //复制tmp到a数组        for(i=0;i<k;i++){            a[first+i]=tmp[i];        }    }public static void main(String[] args) {//冒泡排序int[] a = {5,9,8,1,5,7,3,2,6};bubbleSort(a);for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println("\n--------------------------");//快速排序int[] b = {5,9,8,1,7,3,2,6};quickSort(b,0,b.length-1);for(int i=0;i<b.length;i++){System.out.print(b[i]+" ");}System.out.println("\n--------------------------");//归并排序int[] c = {5,9,8,1,5,7,3,2,6};int tmp[]=new int[c.length];        mergeSort(c, 0, c.length-1, tmp);for(int i=0;i<c.length;i++){System.out.print(c[i]+" ");}}}

0 0
原创粉丝点击