• 几种常用排序算法代码


      1 public class CheckSum {
      2 
      3     /**
      4      * 计算数组中数据之后为sum的两个数字
      5      * @param array
      6      * @param sum
      7      */
      8     public void findTheSum(int array[], int sum) {
      9 
     10         //Arrays.sort(array);
     11 
     12         int[] copy = new int[array.length];
     13 
     14         MergeOrder(array, copy, 0, array.length - 1);
     15 //        fastOrder(array, 0, array.length - 1);
     16         System.out.println(array);
     17         int row = 0, high = array.length - 1;
     18         while (row < high) {
     19 
     20             if (array[row] + array[high] > sum) {
     21                 high--;
     22             } else if (array[row] + array[high] < sum) {
     23                 row++;
     24             } else {
     25                 System.out.println(array[row] + " " + array[high]);
     26                 if (high - 1 >= 0 && array[high] == array[high - 1]) {
     27                     high--;
     28                     continue;
     29                 }
     30 
     31                 if (high - 1 >= 0 && array[row] == array[row + 1]) {
     32                     row++;
     33                     continue;
     34                 }
     35 
     36                 row++;
     37                 high--;
     38             }
     39 
     40         }
     41     }
     42 
     43 
     44 
     45     //小堆排序
     46 
     47     public void duiSortedOrder(int array[], int index,int len) {
     48 
     49         int tempt = array[index];
     50         for (int i = 2 * index + 1; i <= len; i = i * 2 + 1) {
     51             if(i<len&&array[i]>array[i+1]) i++;
     52             if(tempt<array[i]) break;
     53             array[index] = array[i];
     54             index = i;
     55         }
     56         array[index] = tempt;
     57     }
     58 
     59 
     60     //直接插入法
     61     public void InsertOrder(int array[]) {
     62 
     63         for (int i = 1; i < array.length; i++) {
     64             int tempt = array[i], j = i - 1;
     65             for (; j >= 0 && tempt < array[j]; j--) {
     66                 array[j + 1] = array[j];
     67             }
     68             array[j + 1] = tempt;
     69         }
     70     }
     71 
     72 
     73 
     74 
     75     /**
     76      * 归并排序
     77      * @param array
     78      * @param copy
     79      * @param low
     80      * @param high
     81      */
     82     public void MergeOrder(int[] array, int[] copy, int low, int high) {
     83 
     84         if (low == high) return;
     85 
     86         int mid = (low + high) >> 1;
     87 
     88         MergeOrder(array, copy, low, mid);
     89 
     90         MergeOrder(array, copy, mid+1, high);
     91 
     92         //把元素聚合在一起
     93         int left = low;
     94         int right = mid+1;
     95         int cindex = low;
     96         while (left<=mid && right <=high) {
     97 
     98             if (array[left] < array[right]) {
     99                 copy[cindex++] = array[left++];
    100             } else {
    101                 copy[cindex++] = array[right++];
    102             }
    103         }
    104 
    105         for (; left <= mid; ) {
    106             copy[cindex++] = array[left++];
    107         }
    108 
    109         for (; right <=high; ) {
    110             copy[cindex++] = array[right++];
    111         }
    112 
    113 
    114         //把排序之后的元素放置到 array中
    115 
    116         for (int i = low; i < cindex; i++) {
    117             array[i] = copy[i];
    118         }
    119         return;
    120     }
    121 
    122 
    123     /**
    124      * 快速排序
    125      *
    126      * @param array
    127      * @param row
    128      * @param high
    129      */
    130     public void fastOrder(int[] array, int row, int high) {
    131 
    132         if (row < high) {
    133             int mid = Order(array, row, high);
    134             fastOrder(array, row, mid - 1);
    135             fastOrder(array, mid + 1, high);
    136         }
    137 
    138     }
    139 
    140 
    141     public int Order(int[] array, int row, int high) {
    142 
    143         int tempt = array[row];
    144 
    145         while (row < high) {
    146 
    147             while (tempt < array[high] && high > row) {
    148 
    149                 high--;
    150             }
    151 
    152             array[row] = array[high];
    153 
    154             while (tempt > array[row] && row < high) {
    155                 row++;
    156             }
    157             array[high] = array[row];
    158         }
    159 
    160         array[row] = tempt;
    161         return row;
    162 
    163     }
    164 
    165 
    166 
    167      public static void main(String... args) {
    168         CheckSum checkSum = new CheckSum();
    169 
    170         int[] params = new int[]{8, 7, 6, 5, 4, 3, 2};
    171         for (int i = params.length / 2 - 1; i >= 0; i--) {
    172             checkSum.duiSortedOrder(params, i,params.length-1);
    173         }
    174 
    175         //输出排序后的数据
    176 
    177         for (int i = 0; i <= params.length-1; i++) {
    178             System.out.println(params[0]);
    179             params[0] = params[params.length - 1 - i];
    180             checkSum.duiSortedOrder(params, 0, params.length - 1 - i);
    181         }
    182 
    183 
    184         checkSum.InsertOrder(params);
    185         System.out.println(params);
    186 
    187     }
    188 }
  • 相关阅读:
    XML Schema (1)
    xml
    java输入输出流(内容练习)
    Java中I/O的分析
    java File类
    java中Map的用法(HaspMap用法)
    Git
    oracle安装分析
    博客第一天
    正则化 L1 L2
  • 原文地址:https://www.cnblogs.com/09120912zhang/p/9651359.html
Copyright © 2020-2023  润新知