Java实现排序

Java源文件地址:
百度云:http://pan.baidu.com/s/1qW6ygzU
提取码:dndr

交换函数:
    public static void swap(int array[], int x, int y) {
        int t = array[x];
        array[x] = array[y];
        array[y] = t;
    }

一、直接插入:
    public static void insertSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        for (int i = 1; i < array.length; i++) {
            for (int j = i - 1; j >= 0 && array[j] > array[j + 1]; j--) {
                swap(array, j, j + 1);
            }
        }
    }

二、希尔排序:
    public static void shellSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        int length = array.length, j;
        for (int value = length >> 1; value > 0; value >>= 1) {
            for (int i = value; i < length; i++) {
                int temp = array[i];
                for (j = i; j >= value && temp < array[j - value]; j -= value) {
                    array[j] = array[j - value];
                }
                array[j] = temp;
            }
        }
    }

三、直接选择:
    public static void chooseSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        for (int i = 0; i < array.length; ++i) {
            int min = i;
            for (int j = i + 1; j < array.length; ++j) {
                if (array[min] > array[j])
                    min = j;
            }
            if (i != min)
                swap(array, min, i);
        }
    }

四、堆排序:
    public static int left(int index) {
        return 2 * index + 1;
    }

public static int right(int index) {
        return 2 * index + 2;
    }

public static void maxHeapify(int[] array, int size, int index) {
        int left = left(index);
        int right = right(index);
        int largest = index;
        if (left < size && array[left] > array[index]) {
            largest = left;
        }
        if (right < size && array[right] > array[largest]) {
            largest = right;
        }
        if (largest != index) {
            swap(array, index, largest);
            maxHeapify(array, size, largest);
        }
    }

public static void buildMaxHeap(int[] array) {
        for (int index = array.length / 2 - 1; index >= 0; --index) {
            maxHeapify(array, array.length, index);
        }
    }

public static void heapSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        int size = array.length;
        buildMaxHeap(array);
        for (int i = array.length - 1; i > 0; --i) {
            swap(array, 0, i);
            --size;
            maxHeapify(array, size, 0);
        }
    }

五、冒泡排序:
    public static void bubbleSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        for (int i = 0; i < array.length; ++i) {
            for (int j = 0; j < array.length - i - 1; ++j) {
                if (array[j] > array[j + 1]) {
                    swap(array, j, j + 1);
                }
            }
        }
    }

六、快速排序:
    public static void quickSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        doQuickSort(array, 0, array.length - 1);
    }

public static void doQuickSort(int[] array, int begin, int end) {
        if (begin < end) {
            int random = randomizedPartition(array, begin, end);
            doQuickSort(array, begin, random - 1);
            doQuickSort(array, random + 1, end);
        }
    }

public static int randomizedPartition(int array[], int begin, int end) {
        int random = (int) (Math.random() * (end - begin + 1) + begin);
        swap(array, end, random);
        return partition(array, begin, end);
    }

public static int partition(int[] array, int begin, int end) {
        int value = array[end];
        int index = begin - 1;
        for (int i = begin; i < end; ++i) {
            if (array[i] <= value) {
                ++index;
                swap(array, index, i);
            }
        }
        swap(array, index + 1, end);
        return index + 1;
    }

七、归并排序:
    public static void mergeSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        doMergeSort(array, 0, array.length - 1);
    }

public static void doMergeSort(int[] array, int begin, int end) {
        if (begin >= end)
            return;
        int separate = (begin + end) / 2;
        doMergeSort(array, begin, separate);
        doMergeSort(array, separate + 1, end);
        doMergeArray(array, begin, separate, end);
    }

public static void doMergeArray(int[] array, int begin, int separate,
            int end) {
        int[] tempArray = new int[end - begin + 1];
        int i = begin;
        int j = separate + 1;
        int index = 0;
        while (i <=separate && j <= end) {
            if (array[i] < array[j]) {
                tempArray[index++] = array[i++];
            } else {
                tempArray[index++] = array[j++];
            }
        }
        while (i <= separate) {
            tempArray[index++] = array[i++];
        }
        while (j <= end) {
            tempArray[index++] = array[j++];
        }
        for (int k = 0; k < tempArray.length; ++k) {
            array[begin + k] = tempArray[k];
        }
    }

八、基数排序:
    public static void radixSort(int[] array) {
        if (array == null || array.length <= 1)
            return;
        int max = array[0];
        int i, bit;
        for (i = 0; i < array.length; ++i) {
            if (array[i] > max) {
                max = array[i];
            }
        }
        bit = 0;
        while (max > 0) {
            max /= 10;
            ++bit;
        }
        int[] temp = new int[array.length];
        int[] count = new int[10];
        int divide = 1;
        for (i = 0; i < bit; ++i) {
            System.arraycopy(array, 0, temp, 0, array.length);
            Arrays.fill(count, 0);
            for (int j = 0; j < array.length; ++j) {
                int tempKey = (temp[j] / divide) % 10;
                count[tempKey]++;
            }
            for (int j = 1; j < 10; j++) {
                count[j] = count[j] + count[j - 1];
            }
            for (int j = array.length - 1; j >= 0; j--) {
                int tempKey = (temp[j] / divide) % 10;
                count[tempKey]--;
                array[count[tempKey]] = temp[j];
            }
            divide *= 10;
        }
    }

时间: 2024-08-27 10:38:44

Java实现排序的相关文章

java Map排序(升序、降序、随机排序)

基础知识: 1 HashMap会使用key,根据hashcode进行默认排序. 2  LinkedHashMap根据存入先后进行排序 代码展示: 1 随机排序 java Map排序(升序.降序.随机排序),布布扣,bubuko.com

Java-集合--Java集合排序

Java集合排序 前几天在工作的当中遇到对List<Map<String,String>>这样的数据结构按照Map<String,String>中的某个字段排序, 具体的实现为: <span style="font-size:18px;">public void sortList(List<Map<String, String>> list, final String field) { Collections.so

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

java编程排序之自定义类型的集合,按业务需求排序

自定义引用类型放入集合中,按实际业务需求进行排序的两种思路 第一种思路: (1)自定义实体类实现java.lang.Comparable接口,重写public int compareTo(Object obj)方法.自定义业务比较规则 (2)利用java.util.Collections类的静态方法sort(List<自定义类型> list)进行排序(默认升序)或者.自己编写排序工具类.冒泡+compareTo(obj)方法 第二种思路 (1)自己编写业务比较规则类.实体类不用实现任何借口.业

java希尔排序算法

原文:java希尔排序算法 代码下载地址:http://www.zuidaima.com/share/1550463279090688.htm 希尔排序算法的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插人排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<-<d2<d1),即所有记录放在同一组中进行直接插入排序为止.该方法实质上是一种

Java对象排序小测试

import java.util.ArrayList; import java.util.Collections; import java.util.List; /**  * Java对象排序  */ public class User implements Comparable<User> {     private int idx;     public User(int idx) {         this.idx = idx;     }     public int getIdx(

Java集合排序

java集合排序 如何给Java中List集合排序呢?前端时间在工作中遇到类似于给这样的结构排序List<Map<String,String>>>按照其中Map中的某个key值排序呢? 集合产生如下: <span style="font-size:18px;">public void sortList(){ List<List<Map<String,String>>> list = new ArrayList

java选择排序

/** * Created by rabbit on 2014-5-9. */ class ArrayTest2 {     public static void SelectSort(int [] arr) //定义选择排序的方法     {         for (int x=0;x<arr.length;x++)         {             for (int y=0;y<arr.length-1;y++)             {                 if

使用JAVA进行排序

利用JAVA完成排序 当我们在进行数据库进行查询的时候,当需要按某个字段来进行排序的时候,可以使用SQL语句来完成排序,可以升序,也可以降序.JAVA中的Collections类也可以完成这种操作,SQL的用法和这种集合工具类的操作,可以用于不同的情况中,至于怎么用,可以根据业务场景来选择,下面我罗列出具体的代码,大家可以参考. 1)创建工程名为sort的JAVA工程 创建包结构: 创建User类: 1 package com.sunyard.bean; 2 3 /** 4 * <p> 5 *

java桶式排序算法代码下载

原文:java桶式排序算法代码下载 代码下载地址:http://www.zuidaima.com/share/1550463272176640.htm 桶式排序: * 桶式排序不再是基于比较的了,它和基数排序同属于分配类的排序, * 这类排序的特点是事先要知道待排 序列的一些特征. * 桶式排序事先要知道待排 序列在一个范围内,而且这个范围应该不是很大的. * 比如知道待排序列在[0,M)内,那么可以分配M个桶,第I个桶记录I的出现情况, * 最后根据每个桶收到的位置信息把数据输出成有序的形式.