博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速排序&归并排序
阅读量:6434 次
发布时间:2019-06-23

本文共 2071 字,大约阅读时间需要 6 分钟。

快速排序

时间复杂度

O(nlogn) 空间复杂度O(logn) 不稳定

时间复杂度:

最坏O(n^2) 当划分不均匀时候 逆序and排好序都是最坏情况
最好O(n) 当划分均匀
partition的时间复杂度: O(n)一共需要logn次partition

代码

public class quickSort {    public static void sort(int[] array, int start, int end) {        if (start < end) {            int p = partition(array, start, end);            sort(array, start, p - 1);            sort(array, p + 1, end);        }    }    public static int partition(int[] A, int start, int end) {        int left = start;        int right = end;        int pivot = A[start];        while (left < right) {            while (left < right && A[right]> pivot) {                right--;            }            while (left < right && A[left] <= pivot) {                left++;            }            swap(A, left, right);        }        swap(A, start, left);        return left;    }    public static void swap(int[] A, int i, int j) {        int tem = A[i];        A[i] = A[j];        A[j] = tem;     }    public static void main(String[] args) {        int array[] = {8,7,1,6,5,4,3,2};       quickSort s = new quickSort();       s.sort(array, 0, 7);        for(int i=0;i

归并排序

时间复杂度

时间复杂度 O(nlogn), 空间复杂度O(n) +O(logn)

排序时间与输入无关,最佳情况,最坏情况都是如此, 稳定。

代码

public class MergeSort {

public static void sort(int[] A, int start, int end) {    if (start >= end) {        return;    }    int mid = (start + end) / 2;    sort(A, start, mid);    sort(A, mid + 1, end);    merge(A, start, mid, end);}public static void merge(int[] A, int start, int mid, int end) {    int[] helper = new int[A.length];    for (int i = start; i <= end; i++) {        helper[i] = A[i];    }    int i = start, j = mid + 1;    for (int k = start; k <= end; k++) {        if (i > mid) {            A[k]= helper[j++];         } else if (j > end) {            A[k]= helper[i++];         } else if (helper[i]> helper[j]) {            A[k]= helper[j++];         } else {            A[k]= helper[i++];         }    }}public static void main(String[] args) {   int array[] = {8,7,1,6,5,4,3,2};   MergeSort s = new MergeSort();   s.sort(array, 0, 7);    for(int i=0;i

}

转载地址:http://whhga.baihongyu.com/

你可能感兴趣的文章
Kebernetes 学习总结(9)认证-授权-RBAC
查看>>
控制台 - 网络管理之华为交换机 S系列端口限速
查看>>
天下会 - 搜索实战系列之视频
查看>>
修改windows远程登录端口
查看>>
ccflow表结构与运行机制(二次开发必读)
查看>>
mysql数据库引擎调优
查看>>
101 Tips to MySQL Tuning and Optimization
查看>>
对mysql explain讲的比较清楚的
查看>>
上币至iamToken
查看>>
我的友情链接
查看>>
破解sina新浪邮箱密码
查看>>
linux为启动菜单加密码
查看>>
MySQL5.5编译方式安装实战
查看>>
细谈Ehcache页面缓存的使用
查看>>
每天一个linux命令(3):pwd命令
查看>>
GridView如何设置View的初始样式
查看>>
从PHP5.2.x迁移到PHP5.3.x
查看>>
我的友情链接
查看>>
Placeholder in IE8 and older
查看>>
Maven(四):定制库到Mave本地资源库 (Kaptcha)
查看>>