zoukankan      html  css  js  c++  java
  • 排序算法 java实现

    几个排序算法,我是按照算法的伪代码用java实现的,刚开始是int类型的,后来换成泛型。

    这是好早之前写的代码了,现在那出来温习下,就当是准备面试把

    1.简单选择排序

    这个算法应该是最简单的把,就是在数组中从头开始循环,选择最小的放在最前面,这个应该很好实现就不废话了

        public static <T extends Comparable<T>> T[] genericsimpleselectionsort(T[] a){
            for (int i = 0; i < a.length; i++) {
                int min = i;
                int j = i + 1;
                while (j < a.length) {
                    if (a[j].compareTo(a[min])<0)
                        min = j;
                    j++;
                }
                    T temp = a[i];
                    a[i] = a[min];
                    a[min] = temp;
            }
            return a;
        }

    里面加上了泛型,就是T要集成Comparable接口,就是说T类型是能够比较的

    可以写个测试代码,里面加上个main函数就可以了

        public static void main(String[] args) {
            Random random=new Random(47);
            int n=20;
            Integer[] a=new Integer[n];
            for (int i = 0; i < a.length; i++) {
                a[i]=random.nextInt(100);
                System.out.print(a[i]+" ");
            }
            System.out.println();
            Integer[] b=SimpleSelectSort.genericsimpleselectionsort(a);
            for (int i = 0; i < b.length; i++) {
                System.out.print(b[i]+" ");
            }
        }

    这只是测试20个数,可以改成10000,然后把输出注释掉,计算运行时间,比较不同排序算法的运行时间

    2.选择排序算法的改进

    改进一下简单选择排序算法,就是每趟选出最大,最小的,分别放在数组左右两边,所以循环只用做到n/2;

        public static <T extends Comparable<T>> T[] genericselectionsort(T[] a) {
            int n = a.length;
            for (int i = 0; i < n / 2; i++) {
                int min = i;
                int max = i;
                int j = i + 1;
                while (j < n - i) {
                    if (a[j].compareTo(a[min]) < 0)
                        min = j;
                    if (a[j].compareTo(a[max]) > 0)
                        max = j;
                    j++;
                }
                T temp = a[i];
                a[i] = a[min];
                a[min] = temp;
                temp = a[n - i - 1];
                a[n - i - 1] = a[max];
                a[max] = temp;
            }
            return a;
        }

    3.插入排序

    从给的数组的第二个数开始循环,数组前面是排好的,将取出的数一次跟前面排好序的数 从后向前比较,小就将该数的位置后移,知道找到合适的位置插入

    好吧,用语言表达我说不好,应该用图的,但是还不会画图~~还是直接上代码把,很简单的算法,直接看代码应该没问题

        public static <T extends Comparable<T>> T[] genericInsertSort(T[] a) {
            for (int i = 1; i < a.length; i++) {
                int j = i;
                T temp = a[j];
                while (j > 0) {
                    if (temp.compareTo(a[j - 1]) < 0) {
                        a[j] = a[j - 1];
                        j--;
                    } else {
                        break;
                    }
                }
                a[j] = temp;
            }
            return a;
        }

    到下班时间了,先暂时记录这几个简单的排序

  • 相关阅读:
    SpringCloud Alibaba微服务实战十
    万字长文!分布式锁的实现全都在这里了
    python编程中的小技巧(持续更新)
    工作十年的数据分析师被炒,没有方向,你根本躲不过中年危机
    github入门操作快速上手
    167. 两数之和 II
    167. 两数之和 II
    167. 两数之和 II
    怎么使用Fiddler进行抓包
    怎么使用Fiddler进行抓包
  • 原文地址:https://www.cnblogs.com/luolei/p/4680901.html
Copyright © 2011-2022 走看看