一、优化后的冒泡排序

package com.yzh.sort;
/*
冒泡排序
 */
@SuppressWarnings({"all"})
public class BubbleSort {

    public static void BubbleSort(int[]a){
        for (int i = 0; i <a.length-1 ; i  ) {
            boolean flag=true;
            for (int j = 0; j <a.length-i-1 ; j  ) {
                if(a[j]>a[j 1]){
                    int temp=a[j];
                    a[j]=a[j 1];
                    a[j 1]=temp;
                    flag=false;
                }
            }
            if(flag) break;
        }
    }

}

二、选择排序

package com.yzh.sort;
@SuppressWarnings({"all"})
public class SelectSort {

    public static void SelectSort(int[]a) {
        for (int i = 0; i < a.length - 1; i  ) {
            int index = i;//标记为待比较的数
            for (int j = i   1; j < a.length; j  ) { //然后从后面遍历与第一个数比较
                if (a[j] < a[index]) {  //如果小,就交换最小值
                    index = j;//保存最小元素的下标
                }
            }
            //找到最小值后,将最小的值放到第一的位置,进行下一遍循环
            int temp = a[index];
            a[index] = a[i];
            a[i] = temp;
        }
    }
}

三、插入排序

package com.yzh.sort;
@SuppressWarnings({"all"})
/*
插入排序
 */
public class InsertSort {

    public static void InsertSort(int[]a){
        for (int i = 0; i < a.length; i  ) {
            //定义待插入的数
            int insertValue=a[i];
            //找到待插入数的前一个数的下标
            int insertIndex=i-1;
            while (insertIndex>=0 && insertValue <a[insertIndex]) {//拿a[i]前面的数比较
                a[insertIndex 1]=a[insertIndex];
                insertIndex--;
            }
            a[insertIndex 1]=insertValue;
        }
    }
}

四、希尔排序

package com.yzh.sort;

/*
希尔排序
 */
@SuppressWarnings({"all"})
public class ShellSort {

    public static void ShellSort(int[] a){
        for (int gap=a.length / 2; gap > 0; gap = gap / 2) {
            //将整个数组分为若干个子数组
            for (int i = gap; i < a.length; i  ) {
                //遍历各组的元素
                for (int j = i - gap; j>=0; j=j-gap) {
                    //交换元素
                    if (a[j]>a[j gap]) {
                        int temp=a[j];
                        a[j]=a[j gap];
                        a[j gap]=temp;
                    }
                }
            }
        }
    }
}

五、快速排序

package com.yzh.sort;
@SuppressWarnings({"all"})
/*
随机化快速排序
 */
public class QuickSort {

    public static void QuickSort(int[] arr,int low,int high){
        int i,j,temp,t;
        if(low>=high){
            return;
        }
        i=low;
        j=high;
        //temp就是基准位
        temp = arr[low];
        while (i<j) {
            //先看右边,依次往左递减
            while (temp<=arr[j]&&i<j) {
                j--;
            }
            //再看左边,依次往右递增
            while (temp>=arr[i]&&i<j) {
                i  ;
            }
            //如果满足条件则交换
            if (i<j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
        //最后将基准为与i和j相等位置的数字交换
        arr[low] = arr[i];
        arr[i] = temp;
        //递归调用左半数组
        QuickSort(arr, low, j-1);
        //递归调用右半数组
        QuickSort(arr, j 1, high);
    }
}

六、随机化快速排序

package com.yzh.sort;

import java.util.Random;
import java.util.Scanner;

@SuppressWarnings({"all"})
public class RandQuickSort {

    public static void randsort(int[] arr, int left, int right) {
        if(left>=right)
            return;
        Random random = new Random();
        int randIndex = random.nextInt(right-left) left;  //选取随机主元
        //把随机主元放到数组尾部
        int temp = arr[randIndex];
        arr[randIndex] = arr[right];
        arr[right] = temp;
        //数组中元素与主元比较
        int i = left-1;//注意
        for(int j = left;j<=right;j  ) {
            if(arr[j]<arr[right]) {
                i  ;
                int temp1 = arr[i];
                arr[i] = arr[j];
                arr[j] = temp1;
            }
        }
        //最后把主元放到适当位置
        int temp2 = arr[i 1];
        arr[i 1] = arr[right];
        arr[right] = temp2;

        randsort(arr,left,i);
        randsort(arr,i 2,right);
    }
}

七、归并排序

package com.yzh.sort;

@SuppressWarnings({"all"})
/*
归并排序
 */
public class MergeSort {

    private static void mergesort(int[] a, int left, int right, int[] temp) {
        //分解
        if (left<right) {
            int mid=((right-left)>>1) left;
            //向左递归进行分解
            mergesort(a, left, mid, temp);
            //向右递归进行分解
            mergesort(a, mid 1, right, temp);
            //每分解一次便合并一次
            merge(a,left,right,mid,temp);
        }
    }

    private static void merge(int[] a, int left, int right, int mid, int[] temp) {
        int i=left; //初始i,左边有序序列的初始索引
        int j=mid 1;//初始化j,右边有序序列的初始索引(右边有序序列的初始位置即中间位置的后一位置)
        int t=0;//指向temp数组的当前索引,初始为0

        //先把左右两边的数据(已经有序)按规则填充到temp数组
        //直到左右两边的有序序列,有一边处理完成为止
        while (i<=mid && j<=right) {
            //如果左边有序序列的当前元素小于或等于右边的有序序列的当前元素,就将左边的元素填充到temp数组中
            if (a[i]<=a[j]) {
                temp[t  ]=a[i  ];
            }else {
                //反之,将右边有序序列的当前元素填充到temp数组中
                temp[t  ]=a[j  ];
            }
        }
        //把剩余数据的一边的元素填充到temp中
        while (i<=mid) {
            //此时说明左边序列还有剩余元素
            //全部填充到temp数组
            temp[t  ]=a[i  ];
        }
        while (j<=right) {
            //此时说明左边序列还有剩余元素
            //全部填充到temp数组
            temp[t  ]=a[j  ];
        }
        //将temp数组的元素复制到原数组
        t=0;
        int tempLeft=left;
        while (tempLeft<=right) {
            a[tempLeft  ]=temp[t  ];
        }
    }
}

八、可处理负数的基数排序

package com.yzh.sort;

public class RadixSort{

    public static void main(String[] args) {
        int[]a={-2,-1,-6,3,5,1,2,88,-1,99,100,21};
        RadixSort(a);
        for (int x : a) {
            System.out.print(x " ");
        }
        System.out.println();
    }


    public static int[] RadixSort(int[] arr){
        //最大值,用来计算需要找多少次
        int max = Integer.MIN_VALUE;
        //用来判断是否是负数
        int min = Integer.MAX_VALUE;
        //从该数组中找到最大\最小值
        for (int i = 0; i < arr.length; i  ) {
            max = Math.max(max, arr[i]);
            min = Math.min(min, arr[i]);
        }
        //如果最小值小于0,那么把每个数都减去最小值,这样可以保证最小的数是0
        if (min<0) {
            for (int i = 0; i < arr.length; i  ) {
                arr[i] -= min;
            }
            //max也要处理
            max -= min;
        }
        //计算最大值有几位数
        int maxLength = (max "").length();
        //定义十个桶,每个桶就是一个一维数组
        int[][] bucket = new int[10][arr.length];
        //记录每个桶中实际存放了多少个数据
        int[] bucketElementCount = new int[10];
        //根据最大长度数,决定比较次数
        for (int i = 0 ,n = 1 ; i < maxLength ; i  ,n*=10) {
            //每一个数字分别计算余数
            for (int j = 0; j < arr.length ; j  ) {
                int value = arr[j]/n % 10;
                //把当前遍历的数放到指定的位置
                bucket[value][bucketElementCount[value]] = arr[j];
                //该位置加一,为下一个值进来做准备
                bucketElementCount[value]  ;
            }
            //记录arr的位置
            int index = 0;
            //遍历取出第n次排序的值,等于0的不需要取
            for (int j = 0; j < bucketElementCount.length ; j  ) {
                if (bucketElementCount[j]!=0){
                    //遍历取出数据并放到原来的arr中
                    for (int k = 0; k < bucketElementCount[j]; k  ) {
                        arr[index] = bucket[j][k];
                        index  ;
                    }
                }
                //把数量置为零,因为还有n轮
                bucketElementCount[j] = 0;
            }
        }
        //把排序好的arr重新加上减去的值
        if (min<0){
            for (int i = 0; i < arr.length ; i  ) {
                arr[i]  = min;
            }
        }
        return arr;
    }

}

以上就是Java实现常见的排序算法的示例代码的详细内容,更多关于Java排序算法的资料请关注Devmax其它相关文章!

Java实现常见的排序算法的示例代码的更多相关文章

  1. 用Swift实现MD5算法&amp;引入第三方类库MBProgressHUD

    之前项目里面是用objc写的MD5加密算法,最近在用swift重写以前的项目,遇到了这个问题。顺带解决掉的还有如何引入第三方的类库,例如MBProgressHUD等一些特别好的控件解决的方法其实是用objc和swift混合编程的方法,利用Bridging-header文件。你可以简单的理解为在一个用swift语言开发的工程中,引入objective-c文件是需要做的一个串联文件,好比架设了一个桥,让swift中也可以调用objective-c的类库和frame等等。

  2. swift排序算法和数据结构

    vararrayNumber:[Int]=[2,4,216)">6,216)">7,216)">3,216)">8,216)">1]//冒泡排序funcmaopao->[Int]{forvari=0;i

  3. swift - 函数指针的应用 - 避免重复算法

    =nil;})}privatefuncsearch(selector:(Employee->Bool))->[Employee]{varresults=[Employee]();foreinemployees{if(selector(e)){results.append(e);}}returnresults;}}

  4. 如何用 Swift 实现 A* 寻路算法

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. swift算法实践1

    在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。逆波兰表达式,它的语法规定,表达式必须以逆波兰表达式的方式给出。如果,该字符优先关系高于此运算符栈顶的运算符,则将该运算符入栈。倘若不是的话,则将栈顶的运算符从栈中弹出,直到栈顶运算符的优先级低于当前运算符,将该字符入栈。

  6. swift算法实践2

    字符串hash算法Time33在效率和随机性两方面上俱佳。对于一个Hash函数,评价其优劣的标准应为随机性,即对任意一组标本,进入Hash表每一个单元之概率的平均程度,因为这个概率越平均,数据在表中的分布就越平均,表的空间利用率就越高。Times33的算法很简单,就是不断的乘33,见下面算法原型。

  7. swift算法实践3)-KMP算法字符串匹配

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. swift算法实践4)-trie自动机

    1、trie自动机是识别字符串的确定性有向无环自动机2、图示3、构造代码F包括了状态q所对应的P中的字符串

  9. Swift 算法实战之路一

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. Swift 算法实战之路二

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部