java 复习003跳转过来的
C语言实现版见some-sort-algorithms

  1. 快速排序(不稳定 O(n log n))

    package vell.bibi.sort_algorithms;
    
    import vell.bibi.sort_algorithms.util.vell001;
    
    public class QuickSort {
    
        public static int partition(int[] a, int low, int high){
            int cup;
            cup = a[low]; // 保存关键字
            while(high > low){
                while(high > low && a[high] >= cup) high--; // 由high开始找,找到小于关键字的位置 
                a[low] = a[high];
                while(high > low && a[low] <= cup) low ++; // 由low开始找,找到大于关键字的位置
                a[high] = a[low];
            }
            a[low] = cup;
            return low;
        }
        
        public static void sort(int[] a, int low, int high){
            if(high <= low) return;
            int mid = partition(a, low, high); // 分成两个区
            sort(a, low, mid-1);
            sort(a, mid+1, high);
        }
        
        public static void main(String[] args) {
            int[] a = vell001.getRandomList(10, 100);
            vell001.printList(a);
            sort(a, 0, a.length-1);
            vell001.printList(a);
        }
    }
  2. 冒泡排序 (稳定 O(n2))

    package vell.bibi.sort_algorithms;
    
    import vell.bibi.sort_algorithms.util.vell001;
    
    public class BubbleSort {
    
        public static void sort(int[] a){
            int i, j, cup;
            boolean flag;
            for(i=a.length, flag=true; flag && i>0; i--){
                flag = false;
                for(j=0; j<i-1; j++){
                    if(a[j] > a[j+1]){
                        cup = a[j];
                        a[j] = a[j+1];
                        a[j+1] = cup;
                        flag = true;
                    }
                }
            }
        }
        
        public static void main(String[] args) {
            int[] a = vell001.getRandomList(10, 100);
            vell001.printList(a);
            sort(a);
            vell001.printList(a);
        } }
  3. 希尔排序(不稳定 O(n log n))

    package vell.bibi.sort_algorithms;
    
    import vell.bibi.sort_algorithms.util.vell001;
    
    public class ShellSort {
        
        public static void sort(int[] a){
            int i, j, d, cup;
            for(d=a.length/2; d>0; d=d/2){
                for(i=d; i<a.length; i++){
                    cup = a[i];
                    for(j=i-d; j>=0 && a[j]>cup; j=j-d){
                        a[j+d] = a[j];
                    }
                    a[j+d] = cup;
                }
            }
        }
        
        public static void main(String[] args) {
            int[] a = vell001.getRandomList(10, 100);
            vell001.printList(a);
            sort(a);
            vell001.printList(a);
        } }
  4. 堆排序(不稳定 O(n log n))

    package vell.bibi.sort_algorithms;
    
    import vell.bibi.sort_algorithms.util.vell001;
    
    public class HeapSort {
    
        public static void heapAdjust(int[] a, int father, int length){
            int child, cup;
            for(child=father*2+1, cup=a[father]; child<length; father=child, child=father*2+1){
                if(child+1 < length && a[child+1] > a[child])
                    child ++;
                if(a[child] > cup){
                    a[father] = a[child];
                    a[child] = cup;
                } else
                    break;
            }
        }
        
        public static void sort(int[] a){
            int cup;
            for(int i=a.length/2; i>=0; i--){
                heapAdjust(a, i, a.length);
            }
            
            for(int i=a.length-1; i>0; i--){
                cup = a[0];
                a[0] = a[i];
                a[i] = cup;
                heapAdjust(a, 0, i);
            }
        }
        
        public static void main(String[] args) {
            int[] a = vell001.getRandomList(10, 100);
            vell001.printList(a);
            sort(a);
            vell001.printList(a);
        } }
  5. 归并排序(稳定 O(n log n) 需要O(n)额外空间)

    package vell.bibi.sort_algorithms;
    
    import vell.bibi.sort_algorithms.util.vell001;
    
    public class MergeSort {
        
        public static void merge(int[] a, int low, int mid, int high){
            int i=low, j=mid, k=0;
            int[] cup = new int[high-low];
            while(i<mid && j<high){
                if(a[i] <= a[j])
                    cup[k++] = a[i++];
                else
                    cup[k++] = a[j++];
            }
            while(i<mid) cup[k++] = a[i++];
            while(j<high) cup[k++] = a[j++];
            
            for(k=0; k<cup.length; k++){
                a[low + k] = cup[k];
            }
        }
        
        public static void sort(int[] a, int low, int high){
            if(high - low <= 1) return;
            int mid = (high + low) / 2;
            sort(a, low, mid);
            sort(a, mid, high);
            merge(a, low, mid, high);
        }     public static void main(String[] args) {
            int[] a = vell001.getRandomList(10, 100);
            vell001.printList(a);
            sort(a, 0, a.length);
            vell001.printList(a);
        } }
  6. vell001.java (我的小工具库)

    package vell.bibi.sort_algorithms.util;
    
    public class vell001 {
        
        public static void printList(int[] a){
            for(int i=0; i<a.length; i++){
                System.out.print(a[i] + "  ");
            }
            System.out.println();
        }
        
        public static int[] getRandomList(int n, int max){
            int[] a = new int[n];
            for(int i=0; i<n; i++){
                a[i] = (int)(Math.random() * max);
            }
            return a;
        }
    }

原文地址: http://vview.ml/2014/04/13/some-sort-algorithms-java.html
written by Vell Bibi posted at VBlog

java 复习003 之排序篇的更多相关文章

  1. java 复习003

    今天主要复习下数据结构的东西 树 自平衡二叉查找树 AVL树(高平衡树)(wiki) 特性:任何节点的两个子树的高度最大差别为一 时间复杂度:查找.插入和删除在平均和最坏情况下都是O(log n) 红 ...

  2. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  3. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  4. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  5. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  6. Java有用经验总结--Swing篇

    Java有用经验总结--Swing篇 前言 本文前言部分为我的一些感想,假设你仅仅对本文介绍的Java有用技巧感兴趣,能够跳过前言直接看正文的内容. 本文的写作动机来源于近期接给人家帮忙写的一个小程序 ...

  7. Java面试题之基础篇概览

    Java面试题之基础篇概览 1.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,且public的类名必须与文件名相一致. 2.Ja ...

  8. Java面试知识点之线程篇(二)

    前言:接上篇,这里继续对java线程相关知识点进行总结. 1.notify和notifyall的区别 notify()方法能够唤醒一个正在等待该对象的monitor的线程,当有多个线程都在等待该对象的 ...

  9. Java面试知识点之线程篇(一)

    前言:在Java面试中,一定会遇到线程相关问题,因此笔者在这里总结Java中有关线程方面知识点,多数从网上得来(文中会贴出主要参考链接),有些也是笔者在面试中所遇到的问题,如有错误,请不吝指正.主要参 ...

随机推荐

  1. 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录

    原文 基于IDEA 最新Spirng3.2+hibernate4+struts2.3 全注解配置 登录 首先说说 IDEA 12,由于myeclipse越来越卡,我改用idea12 了,发现其功能强悍 ...

  2. iOS 相机和相册使用授权

    1.判断用户是否有权限访问相册 授权一次后,不在提示是否授权 #import <AssetsLibrary/AssetsLibrary.h> ALAuthorizationStatus a ...

  3. c语言中static的用法

    1.static定义变量: 1).局部: a.静态局部变量在函数内部定义,生存期为整个源代码,但作用域与自动变量相同,只能在定义的函数里面使用.退出该函数后,虽然此变量还存在内存中,但不能使用. b. ...

  4. linux命令-shopt

    shopt命令 shopt命令用于显示和设置shell中的行为选项,通过这些选项以增强shell易用性.shopt命令若不带任何参数选项,则可以显示所有可以设置的shell操作选项. 开启与关闭 开启 ...

  5. Splunk常用命令

    重启/查看状态/停止splunk [root@localhost splunk]# /opt/splunk/bin/splunk restart / status / stop

  6. MVC运行原理

    Global.asax Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一 ...

  7. 深度卷积神经网络用于图像缩放Image Scaling using Deep Convolutional Neural Networks

    This past summer I interned at Flipboard in Palo Alto, California. I worked on machine learning base ...

  8. Oracle VM VirtualBox虚拟机安装系统

    作为一个前端,必须要有自己的虚拟机,用于测试 IE6 .IE7浏览器. 要测试这两个浏览器,必须要是 Windows XP 系统才可以,这里我找到两个纯净版的 xp 系统 iso 镜像文件. http ...

  9. poj 2891 Strange Way to Express Integers (扩展gcd)

    题目链接 题意:给k对数,每对ai, ri.求一个最小的m值,令m%ai = ri; 分析:由于ai并不是两两互质的, 所以不能用中国剩余定理. 只能两个两个的求. a1*x+r1=m=a2*y+r2 ...

  10. symbolicatecrash位置

    symbolicatecrash是一个隐藏工具,它在我的Mac中的具体路径如下(Xcode6.1.app请换成你的Xcode名称) /Applications/Xcode6.1.app/Content ...