常用排序算法总结

来源:互联网 发布:苹果软件破解版 编辑:程序博客网 时间:2024/05/16 17:52
排序算法java实现如下:
//介绍了冒泡,快速,选择,插入以及归并5中排序算法。public class Sort {public static int[] quickSort(int[] a,int begin,int end)  //快速排序{if(begin<end){int i=begin,j=end;int vot = a[i];if(i!=j){while(i<j&&vot<=a[j])j--;if(i<j)a[i++]=a[j];while(i<j&&vot>=a[i])i++;if(i<j)a[j--]=a[i];}a[i]=vot;quickSort(a,begin,i-1);quickSort(a,i+1,end);}return a;}public static int[] maoPaoSort(int[] a)  //冒泡排序{boolean flag = true;for(int i=1;i<a.length&&flag;i++){flag=false;for(int j=0;j<a.length-i;j++){if(a[j]>a[j+1]){int temp = a[j];a[j]=a[j+1];a[j+1]=temp;flag=true;}}}return a;}public static int[] insertSort(int[] a)  //插入排序{for(int i=1;i<a.length;i++){int j;for(j=i-1;j>=0;j--){if(a[i]<a[j]){a[j+1]=a[j];}}a[j+1]=a[i];}return a;}public static int[] swapSort(int[] a)//选择排序{for(int i=0;i<a.length-1;i++){int min=i;for(int j=i+1;j<a.length;j++){if(a[min]>a[j]){min=j;}}if(min!=i){int temp=a[min];a[min]=a[i];a[i]=temp;}}return a;}    public static void mergeSort(int[] a, int first, int last)    {        int mid = (first+last)/2;  //获取中间位置        if(first==last)            return;        mergeSort(a,first,mid);        mergeSort(a,mid+1,last);        merge(a,first,mid,last);    }public static void merge(int[] a, int first, int mid, int last){        int[] b;  //临时数组        b = new int[a.length];        int i=first,j=mid+1,k=first;        while(i<=mid&&j<=last)        {            if(a[i]<=a[j])            {                b[k++]=a[i++];            }            else            {                           b[k++]=a[j++];            }        }        while(i<=mid) //把剩余的添加到b中        {             b[k++]=a[i++];        }        while(j<=last)//把剩余的添加到b中        {                b[k++]=a[j++];        }        for(i=first;i<=last;i++) //把排好序的数组重新赋给a        {            a[i]=b[i];        }    }}

时间复杂度空间复杂度如下:


其中,插入和冒泡排序在数组有顺序的情况下,会得到最好的时间复杂度。而快速排序会在数组有序情况下时间复杂度会退化成O(n2);

1,2,3,4,5,6,7例如这个数组。

0 0