zoukankan      html  css  js  c++  java
  • Java基础学习总结(28)——Java对各种排序算法的实现

    这里总结下各种排序算法的java实现
    冒泡排序
    public class BubbleSort {

    publicstaticint[] bubbleSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        for(inti = 0; i < array.length; i++) {  
            for(intj = i + 1; j < array.length; j++) {  
                if(array[i] > array[j]) {  
                    array[i] = array[i] + array[j];  
                    array[j] = array[i] - array[j];  
                    array[i] = array[i] - array[j];  
                } 
            } 
        } 
    
        returnarray; 
    } 
    

    }
    插入排序
    public class InsertSort {

    publicstaticint[] insertSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        for(inti = 1; i < array.length; i++) {  
            for(intj = i; (j > 0) && (array[j] < array[j - 1]); j--) {  
                SortUtils.swap(array, j, j - 1); 
            } 
        } 
    
        returnarray; 
    } 
    

    }

    选择排序
    public class SelectionSort {

    publicstaticint[] selectionSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        for(inti = 0; i < array.length; i++) {  
            intlowIndex = i;  
            for(intj = array.length - 1; j > i; j--) {  
                if(array[j] < array[lowIndex]) {  
                    lowIndex = j;  
                } 
            } 
    
            SortUtils.swap(array, i, lowIndex);  
        } 
    
        returnarray; 
    } 
    

    }

    ?
    Shell排序
    public class ShellSort {

    publicstaticint[] shellSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        for(inti = array.length / 2; i > 2; i /= 2) {  
            for(intj = 0; j < i; j++) {  
                insertSort(array, j, i);  
            } 
        } 
    
        insertSort(array,0,1); 
    
        returnarray; 
    } 
    
    privatestaticvoidinsertSort(int[] array, intstart,intinc) {  
        for(inti = start + inc; i < array.length; i += inc) {  
            for(intj = i; (j >= inc) && (array[j] < array[j - inc]); j -= inc) {  
                SortUtils.swap(array, j, j - inc);  
            } 
        } 
    } 
    

    }

    ?
    快速排序
    public class QKSort {

    publicstaticint[] quickSort(int[] array) {  
        if(array != null) {  
            returnquickSort(array,0, array.length - 1); 
        } 
    
        returnnull; 
    } 
    
    privatestaticint[] quickSort(int[] array, intbeg,intend) {  
        if(beg >= end || array == null) {  
            returnnull; 
        } 
    
        intp = partition(array, beg, end);  
        quickSort(array, beg, p - 1); 
        quickSort(array, p + 1, end);  
    
        returnarray; 
    } 
    
    /**
     * 找到分界点 
     * @param array 
     * @param beg 
     * @param end 
     * @return 
     */ 
    privatestaticintpartition(int[] array, intbeg,intend) {  
        intlast = array[end];  
        inti = beg - 1; 
    
        for(intj = beg; j <= end - 1; j++) {  
            if(array[j] <= last) {  
                i++; 
                if(i != j) {  
                    array[i] = array[i] ^ array[j];  
                    array[j] = array[i] ^ array[j];  
                    array[i] = array[i] ^ array[j];  
                } 
            } 
        } 
    
        if((i + 1) != end) {  
            array[i + 1] = array[i + 1] ^ array[end];  
            array[end] = array[i + 1] ^ array[end];  
            array[i + 1] = array[i + 1] ^ array[end];  
        } 
    
        returni + 1; 
    } 
    

    }

    堆排序
    public class HeapSort {

    publicstaticint[] heapSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
        MaxHeap h = newMaxHeap(); 
        h.init(array); 
    
        for(inti = 0; i < array.length; i++) {  
            h.remove(); 
        } 
    
        System.arraycopy(h.queue,1, array, 0, array.length);  
    
        returnarray; 
    } 
    
    privatestaticclassMaxHeap {  
    
        voidinit(int[] data) {  
            this.queue = newint[data.length + 1]; 
            for(inti = 0; i < data.length; i++) {  
                queue[++size] = data[i];  
                fixUp(size); 
            } 
        } 
    
        privateintsize = 0; 
    
        privateint[] queue;  
    
        publicintget() {  
            returnqueue[1]; 
        } 
    
        publicvoidremove() {  
            SortUtils.swap(queue,1, size--);  
            fixDown(1); 
        } 
    
        // fixdown  
        privatevoidfixDown(intk) {  
            intj; 
            while((j = k << 1) <= size) {  
                if(j < size && queue[j] < queue[j + 1]) {  
                    j++; 
                } 
    
                // 不用交换  
                if(queue[k] > queue[j]) {  
                    break; 
                } 
    
                SortUtils.swap(queue, j, k);  
                k = j;  
            } 
        } 
    
        privatevoidfixUp(intk) {  
            while(k > 1) {  
                intj = k >> 1; 
                if(queue[j] > queue[k]) {  
                    break; 
                } 
    
                SortUtils.swap(queue, j, k);  
                k = j;  
            } 
        } 
    
    } 
    

    }

    归并排序
    public class MergeSort {

    publicstaticint[] mergeSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        int[] temp = newint[array.length]; 
        returnmergeSort(array, temp, 0, array.length - 1); 
    } 
    
    privatestaticint[] mergeSort(int[] array, int[] temp, intl,intr) {  
        intmid = (l + r) / 2; 
        if(l == r) {  
            returnnull; 
        } 
        mergeSort(array, temp, l, mid);  
        mergeSort(array, temp, mid + 1, r);  
        for(inti = l; i <= r; i++) {  
            temp[i] = array[i];  
        } 
        inti1 = l;  
        inti2 = mid + 1; 
        for(intcur = l; cur <= r; cur++) {  
            if(i1 == mid + 1) {  
                array[cur] = temp[i2++];  
            }elseif(i2 > r) {  
                array[cur] = temp[i1++];  
            }elseif(temp[i1] < temp[i2]) {  
                array[cur] = temp[i1++];  
            }else{ 
                array[cur] = temp[i2++];  
            } 
        } 
    
        returnarray; 
    } 
    

    }

    归并排序(改进)
    public class MergeSortImproved {

    privatestaticfinalint THRESHOLD = 10; 
    
    publicstaticint[] mergeSort(int[] array) {  
        if(array == null) {  
            returnnull; 
        } 
    
        int[] temp = newint[array.length]; 
        returnmergeSort(array, temp, 0, array.length - 1); 
    } 
    
    privatestaticint[] mergeSort(int[] array, int[] temp, intl,intr) {  
        inti, j, k;  
        intmid = (l + r) / 2; 
        if(l == r) {  
            returnnull; 
        } 
    
        if((mid - l) >= THRESHOLD) {  
            mergeSort(array, temp, l, mid);  
        }else{ 
            insertSort(array, l, mid - l + 1); 
        } 
    
        if((r - mid) > THRESHOLD) {  
            mergeSort(array, temp, mid + 1, r);  
        }else{ 
            insertSort(array, mid + 1, r - mid);  
        } 
    
        for(i = l; i <= mid; i++) {  
            temp[i] = array[i];  
        } 
        for(j = 1; j <= r - mid; j++) {  
            temp[r - j + 1] = array[j + mid];  
        } 
        inta = temp[l];  
        intb = temp[r];  
        for(i = l, j = r, k = l; k <= r; k++) {  
            if(a < b) {  
                array[k] = temp[i++];  
                a = temp[i];  
            }else{ 
                array[k] = temp[j--];  
                b = temp[j];  
            } 
        } 
    
        returnarray; 
    } 
    
    privatestaticvoidinsertSort(int[] array, intstart,intlen) {  
        for(inti = start + 1; i < start + len; i++) {  
            for(intj = i; (j > start) && array[j] < array[j - 1]; j--) {  
                SortUtils.swap(array, j, j - 1); 
            } 
        } 
    } 
    

    }

  • 相关阅读:
    C# WPF 窗体传递消息
    WPF ProgressBar 样式
    WPF的TextBox以及PasswordBox显示水印文字
    Win8.1 Hyper-V 共享本机IP上网
    ASP.NET MVC入门-Startup 类:注册服务和使用中间件
    ASP.NET MVC入门-Program类:程序的入口
    Unity3d AssetBundle 资源加载与管理
    C#考核知识点总结
    数据结构与算法之美-字符串匹配(上)
    LeetCode-探索链表-综合问题
  • 原文地址:https://www.cnblogs.com/zhanghaiyang/p/7213206.html
Copyright © 2011-2022 走看看