博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种排序算法整理
阅读量:6464 次
发布时间:2019-06-23

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

一、选择排序

public class SelectSort{/***选择排序基本思想:*首先,将一个序列中的最小值与第一个值交换;*第二轮,将剩下n-1个值组成的序列中的最小值与第二个值交换;*直至交换完全。*时间复杂度为O(n2),空间复杂度O(1),因为只使用了一个辅助变量,且是在原记录数据上进行操作的。*@param unordered 一个无序列表(为简单起见,假设为整型数组)。*/public static void main(String[] args) {    int test[]={1,3,2,6,4,5,10,9,8,10,7,11};    for(int i:test)    {        System.out.print(i+" ");    }    System.out.println();    selectSort(test);    for(int j:test)    {        System.out.print(j+" ");    }}static void selectSort(int unordered[]){    int len = unordered.length;    int temp,j;    for(int i=0;i

二、插入排序

public class InsertSort{    public static void main(String[] args) {        InsertSort is = new InsertSort();        int test[]={1,3,2,6,4,5,10,9,8,10,7,11};        for(int i:test)        {            System.out.print(i+" ");        }        System.out.println();        is.insertSort(test);        for(int j:test)        {            System.out.print(j+" ");        }        }/***插入排序基本思想:*将一组数列看做是一个有序数列和一个无序数列的组合,每次在有序数列中插入一个数,使之仍然为有序数列。*时间复杂度为O(n2),空间复杂度O(1),因为只使用了一个辅助变量,且是在原记录数据上进行操作的。*@param unordered 一个无序列表(为简单起见,假设为整型数组)。*/    void insertSort(int unsorted[])    {        int len=unsorted.length;        int j,temp;        for(int i=1;i

三、冒泡排序

public class BubbleSort{    public static void main(String[] args) {        BubbleSort bs = new BubbleSort();        int test[]={1,3,2,6,4,5,10,9,8,10,7,11};        for(int i:test)        {            System.out.print(i+" ");        }        System.out.println();        bs.bubbleSort(test);        for(int j:test)        {            System.out.print(j+" ");        }    }        /**    *冒泡排序的基本思想:    *通过将数组中的相邻数字进行两两比较,将较大的沉底,较小的浮出水面。    *时间复杂度为O(n2),空间复杂度O(1),因为只使用了一个辅助变量,且是在原记录数据上进行操作的。    *@param unsorted[] 一个无序数组,假定为整型数组。    */    void bubbleSort(int unsorted[])    {        int len = unsorted.length;        int temp;        for(int i=0;i

四、快速排序

public class QuickSort{    public static void main(String[] args) {        int arr [] = {20,6,15,9,19,21,13,16,22,15};        QuickSort qs = new QuickSort();        qs.quickSort(arr);        for(int i:arr)        {            System.out.print(i+" ");        }            }    /**    *快速排序的基本思想:    *通过一趟排序将待排记录分割成两个区域,    *其中一个区域中的关键字均比另一个区域中的小(区域内不一定是有序的);    *然后分别对这两个区域进行分割,即递归执行。    *时间复杂度为O(nlogn),最坏的情况下是O(n2).不稳定。    *@param unsorted[] 一个无序数组,假定为整型数组。    */    int partition(int unsorted[],int low,int high)    {        int temp=unsorted[low];        while(low
=temp) high--; //如果高位大于临时值,则降低高位,直至小于temp,将此值赋予低位; unsorted[low]=unsorted[high]; while(low
<=temp) low++; //如果低位小于临时值,则增加高位,直至大于temp,将此值赋予高位; unsorted[high]=unsorted[low]; }//while unsorted[low]=temp; //将temp赋予低位 return low; //返回低位数字 } void qSort(int unsorted[],int s,int t) { int temp; if(s

五、归并排序

public class MergeSort1 {    /**     * 归并排序的基本思想     * 将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。     * 然后再把有序子序列合并为整体有序序列     * 时间复杂度为O(nlogn)     * 稳定排序方式     * @param nums 待排序数组     * @return 输出有序数组     */    public static int[] sort(int[] nums, int low, int high) {           int mid = (low + high) / 2;        if (low < high) {            // 左边            sort(nums, low, mid);            // 右边            sort(nums, mid + 1, high);            // 左右归并            merge(nums, low, mid, high);        }        return nums;    }    public static void merge(int[] nums, int low, int mid, int high) {     //将两个有序列表合并        int[] temp = new int[high - low + 1];        int i = low;// 左指针        int j = mid + 1;// 右指针        int k = 0;        // 把较小的数先移到新数组中        while (i <= mid && j <= high) {            if (nums[i] < nums[j]) {                temp[k++] = nums[i++];            } else {                temp[k++] = nums[j++];            }        }        // 把左边剩余的数移入数组        while (i <= mid) {            temp[k++] = nums[i++];        }        // 把右边边剩余的数移入数组        while (j <= high) {            temp[k++] = nums[j++];        }        // 把新数组中的数覆盖nums数组        for (int k2 = 0; k2 < temp.length; k2++) {            nums[k2 + low] = temp[k2];        }    }        // 归并排序的实现    public static void main(String[] args) {        int[] nums = { 2, 7, 8, 3, 1, 6, 9, 0, 5, 4 };        MergeSort1.sort(nums, 0, nums.length-1);        for(int i : nums)        {            System.out.print(i+",");        }    }}

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

你可能感兴趣的文章
pip使用阿里源
查看>>
JVM平台运行相关
查看>>
python3.5 for mysql-connector(windows)
查看>>
python3.x的程序如何打包成exe可执行文件
查看>>
SpringBoot | 第二十章:异步开发之异步请求
查看>>
OSChina 周四乱弹 ——女神节女神在干嘛?
查看>>
ORACLE 12C新特性——CDB与PDB
查看>>
电邮靠谱指南
查看>>
golang -- 时间日期总结
查看>>
阿里面试回来,想和Java程序员谈一谈
查看>>
滑动scrollview时,随距离改变属性的动画原理!(类似陌陌,网易,path个人属性界面的动画效果)...
查看>>
XMl 序列化的小问题
查看>>
js 数组去重方法总结
查看>>
插入排序1
查看>>
我的友情链接
查看>>
【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
查看>>
WampServer 多站点域名访问配置教程
查看>>
ubuntu 14.0.4 64位操作系统 安装opencv软件
查看>>
全屏登录窗口随窗口的缩放而缩放
查看>>
狐狸文│区块链不是用来讲故事的
查看>>