zoukankan      html  css  js  c++  java
  • Java数据结构与算法(2)

    排序需要掌握的有冒泡排序,插入排序和选择排序。时间为O(N*N)。

    冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移。

    插入排序: 从排序过程的中间开始(程序从第二个数组项开始a[1]),此时队列已经拍好了一部分。此时,将后边的数组项一次插入到已经排好序的部分队列中。

    选择排序: 从第一个数组项开始,找到包括该数组项在内的所有往后数组项中的最小项与当前项进行交换,其实相当于依次将最小值往前冒泡。

    示例代码:

    package chap03.BubbleSort;
    
    // bubbleSort.java
    // demonstrates bubble sort
    // to run this program: C>java BubbleSortApp
    
    class ArrayBub {
        private long[] a;
        private int nElems;
    
        public ArrayBub(int max) {
            a = new long[max];
            nElems = 0;
        }
    
        public void insert(long value) {
            a[nElems] = value;
            nElems++;
        }
    
        public void display() {
            for (int j = 0; j < nElems; j++) {
                System.out.print(a[j] + " ");
            }
            System.out.println("");
        }
    
        // 冒泡排序
        public void bubbleSort() {
            int out, in;
    
            for (out = nElems - 1; out > 1; out--) {
                for (in = 0; in < out; in++) {
                    if (a[in] > a[in + 1]) {
                        swap(in, in + 1);
                    }
                }
            }
        }
        
        // 插入排序
        public void insertionSort() {
            int in, out;
    
            // out is dividing line
            for (out = 1; out < nElems; out++) 
            {
                // remove marked item
                long temp = a[out]; 
                // start shifts at out
                in = out; 
                while (in > 0 && a[in - 1] >= temp) {
                    a[in] = a[in - 1];  
                    --in;  
                }
                a[in] = temp; 
            } 
        } 
        
        // 选择排序
        public void selectionSort() {
            int out, in, min;
    
            for (out = 0; out < nElems - 1; out++) {
                min = out;  
                for (in = out + 1; in < nElems; in++) {
                    if (a[in] < a[min]) {
                        min = in;  
                    }
                }
                swap(out, min);  
            }  
        }
    
        private void swap(int one, int two) {
            long temp = a[one];
            a[one] = a[two];
            a[two] = temp;
        }
    }
    
    class BubbleSortApp {
        public static void main(String[] args) {
            int maxSize = 100;
            ArrayBub arr;
            arr = new ArrayBub(maxSize);
    
            arr.insert(77);
            arr.insert(99);
            arr.insert(44);
            arr.insert(55);
            arr.insert(22);
            arr.insert(88);
            arr.insert(11);
            arr.insert(00);
            arr.insert(66);
            arr.insert(33);
    
            arr.display();
    
            arr.bubbleSort();
    
            arr.display();
        }
    }
  • 相关阅读:
    Cookie、LocalStorge、SesstionStorge 的区别和用法
    JavaScript奇技淫巧44招
    js中callee与caller的区别
    两个示例介绍JavaScript的闭包
    js 判断url的?后参数是否包含某个字符串
    js实现输入验证码
    js关于DOM和BOM
    HTTP 协议
    HTML CSS JS 的初识
    异步函数
  • 原文地址:https://www.cnblogs.com/thlzhf/p/4024322.html
Copyright © 2011-2022 走看看