• 简单排序算法


    今天无聊的写了几行简单排序算法,可以参考一下。。。

    简单介绍一下简单排序算法:

    1.冒泡排序:0~N-1一次比较,如果左边的>右边那么Swap。然后依次向右移动一次继续进行比较。

          第一趟最多比较N-1,第二趟最多比较N-2以此类推最后最多比较1次结束。

          对于10个数据就是9+8+7+6+5+4+3+2+1=45次。Big O=N的2次方。

    2.选择排序:选择一个最小的数字,与最左端的交换位置。

          第一趟选择最小的放到索引为0的位置,第二趟放到索引为1的位置以此类推直到最后一个。

          交换次数Big O=N,比较次数Big O=N的2次方。

    3.插入排序:一般用于局部有序的情况。选择一个位置(1),一次向左比较是否大于选择的数字并且满足当前索引大于0,

          在比较时满足条件那么向右移动补空洞。然后把选择的数字插入合适的位置。具体如下:

    以下是main方法

         MyArrary array = new MyArrary(10);
            array.unorderedInsert(10);
            array.unorderedInsert(9);
            array.unorderedInsert(8);
            array.unorderedInsert(7);
            array.unorderedInsert(6);
            array.display();
            System.out.println("-------Bubble Sort");
            array.bubbleSort();
            array.display();
            System.out.println("-------Ordered Insert");
            int value = 0;
            while (!array.isPull()) {
                array.orderedInsert(++value);
            }
            array.display();
            System.out.println("-------Delete By Index 4");
            System.out.println("Delete:" + array.deleteByIndex(4));
            array.display();
            System.out.println("-------Delete By Value 1");
            System.out.println("Delete:" + array.deleteByValue(1));
            array.display();
            System.out.println("-------Unordered Insert value 1");
            array.unorderedInsert(1);
            array.display();
            System.out.println("-------Insertion Sort");
            array.insertionSort();
            array.display();
            System.out.println("-------Unordered Insert value 5");
            array.unorderedInsert(5);
            array.display();
            System.out.println("-------Selection Sort");
            array.selectionSort();
            array.display();
            System.out.println("-------Find Value 3 By Binary");
            System.out.println("Find Index: "+array.findByBinary(3));
            System.out.println("-------Find Value 3 By Normal");
            System.out.println("Find Index: "+array.findByBinary(3));
            System.out.println("-------Delete ALL");
            while (!array.isEmpty()) {
                array.deleteByIndex(0);
            }
            System.out.println("Is Empty: " + array.isEmpty());

    以下是MyArrary 类

    public class MyArrary {
        private long[] arry;
        private int elems;
    
        public MyArrary(int size) {
            arry = new long[size];
            elems = 0;
        }
    
        public void unorderedInsert(long value) {
            arry[elems++] = value;
        }
    
        public void orderedInsert(long value) {
            int i = 0;
            for (; i < elems; i++)
                if (arry[i] > value)
                    break;
            for (int j = elems; j > i; j--)
                arry[j] = arry[j - 1];
            arry[i] = value;
            elems++;
        }
    
        public boolean deleteByIndex(int index) {
            if (index < 0 || index == elems)
                return false;
            for (int i = index; i < elems - 1; i++) {
                arry[i] = arry[i + 1];
            }
            elems--;
            return true;
        }
    
        public boolean deleteByValue(long value) {
            int index = findByBinary(value);
            if (index == -1)
                return false;
            for (int i = index; i < elems - 1; i++) {
                arry[i] = arry[i + 1];
            }
            elems--;
            return true;
        }
    
        public long getElementByIndex(int index) {
            return arry[index];
        }
    
        public int findByNormal(long value) {
            int i = 0;
            for (; i < elems; i++)
                if (arry[i] == value)
                    break;
            if (i == elems)
                return -1;
            return i;
        }
    
        public int findByBinary(long value) {
            int upper = elems;
            int lower = 0;
            int cur;
            while (true) {
                cur = (upper + lower) / 2;
                if (arry[cur] == value)
                    return cur;
                else if (lower > upper)
                    return -1;
                else {
                    if (arry[cur] < value)
                        lower = cur + 1;
                    else
                        upper = cur - 1;
                }
            }
        }
    
        public void bubbleSort() {
            for (int i = 0; i < elems - 1; i++)
                for (int j = 0; j < elems - i - 1; j++)
                    if (arry[j] > arry[j + 1]) {
                        swap(j, j + 1);
                    }
        }
    
        public void selectionSort() {
            int min;
            for (int i = 0; i < elems - 1; i++) {
                min = i;
                for (int j = i + 1; j < elems; j++)
                    if (arry[min] > arry[j])
                        min = j;
                swap(i, min);
            }
        }
    
        public void insertionSort() {
            long temp;
            int swapIndex;
            for (int i = 1; i < elems; i++) {
                temp = arry[i];
                for (swapIndex = i; swapIndex > 0 && arry[swapIndex - 1] > temp; swapIndex--)
                    arry[swapIndex] = arry[swapIndex - 1];
                arry[swapIndex] = temp;
            }
        }
    
        public void swap(int from, int to) {
            long temp = arry[from];
            arry[from] = arry[to];
            arry[to] = temp;
        }
    
        public void display() {
            for (int i = 0; i < elems; i++) {
                System.out.print(arry[i] + " ");
            }
            System.out.println();
        }
    
        public boolean isEmpty() {
            return elems == 0;
        }
    
        public boolean isPull() {
            return elems == arry.length;
        }
    }

    以下是运行结果:

  • 相关阅读:
    视频上云解决方案EasyCVR支持接入海康SDK吗?
    视频上云网关EasyCVR程序数据库内数据会丢失吗?
    视频上云解决方案EasyCVR打包软件在linux下解压后台无法运行问题排查
    视频上云解决方案EasyCVR发布linux版本
    视频流媒体平台EasyNVR使用Vue.js开发报[Vue warn]错误问题解决方案
    监控现场无固定IP及公有云服务器如何通过手机查看视频直播?
    幼儿园EasyNVR能力层安防监控平台调用视频直播流报404错误解决方案
    海康NVR的RTSP视频流能否在EasyNVR流媒体平台中正常播放?
    视频云端流媒体平台EasyNVR存储的录像为什么呈现每小时一段录像?
    如何查看EasyNTS智能云组网硬件终端内的资源使用情况?
  • 原文地址:https://www.cnblogs.com/hongguang-kim/p/5761827.html
Copyright © 2020-2023  润新知