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. JAX-RS入门

    JAX-RS入门 一 :基础 博客分类: JAX-RS   简介 JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源.标注包括: ...

  2. Linux进程的睡眠和唤醒简析

    COPY FROM:http://www.2cto.com/os/201204/127771.html 1 Linux进程的睡眠和唤醒 在Linux中,仅等待CPU时间的进程称为就绪进程,它们被放置在 ...

  3. 写出完美论文的十个技巧10 Tips for Writing the Perfect Paper

    10 Tips for Writing the Perfect Paper Like a gourmet meal or an old master painting, the perfect col ...

  4. svn: E180001: Unable to open an ra_local session to URL问题解决方案

    在使用Android Studio的SVN导入项目时,出现了: svn: E180001: Unable to open an ra_local session to URLsvn: E180001: ...

  5. ASP.NET MVC 学习5、登陆页面改为SSO验证

    单点登录(SSO,single sign-on)是一个会话或用户身份验证过程,用户只需要登录一次就可以访问所有相互信任的应用系统,二次登录时无需重新输入用户名和密码.简化账号登录过程并保护账号和密码安 ...

  6. UVa 11732 (Tire树) "strcmp()" Anyone?

    这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公 ...

  7. BZOJ2151: 种树

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2151 题解:此题=数据备份.喜闻乐见挂链表. 代码: #include<cstdio&g ...

  8. Android基础_2 Activity线性布局和表格布局

    在activity的布局中,线性布局和表格布局是最简单的,这次分别从线性布局,表格布局以及线性布局和表格混合布局做了实验,实验中只需要编写 相应的xml的代码,java代码不需要更改,因为我们这里只是 ...

  9. Java知识点:琐碎知识点(2)

    49个关键字一览 abstract default if private this boolean do implements protected throw break double import ...

  10. poj 2230 Watchcow(欧拉回路)

    关键是每条边必须走两遍,重复建边即可,因为确定了必然存在 Euler Circuit ,所以所有判断条件都不需要了. 注意:我是2500ms跑过的,鉴于这道题ac的code奇短,速度奇快,考虑解法应该 ...