zoukankan      html  css  js  c++  java
  • 基础算法3——直接选择排序和堆排序

    View Code
     1 public class MySelectionSort {
     2 
     3     // 直接选择排序
     4     public void StraightSelectionSort(double[] sorted) {
     5         for (int i = 1; i < sorted.length; i++) {
     6             int minIndex = findMinIndex(sorted, i);
     7             exchange(sorted, i, minIndex);
     8         }
     9     }
    10 
    11     private void exchange(double[] sorted, int i, int j) {
    12         // TODO Auto-generated method stub
    13         if (i < sorted.length && j < sorted.length && i < j && i >= 0 && j >= 0) {
    14             double temp = sorted[i];
    15             sorted[i] = sorted[j];
    16             sorted[j] = temp;
    17         }
    18     }
    19 
    20     private int findMinIndex(double[] sorted, int i) {
    21         // TODO Auto-generated method stub
    22         int minIndex = 1;
    23         double minValue = Double.MAX_VALUE;
    24         for (int j = i; j < sorted.length; j++) {
    25             if (sorted[j] < minValue) {
    26                 minValue = sorted[j];
    27                 minIndex = j;
    28             }
    29         }
    30         return minIndex;
    31     }
    32 
    33     //小顶堆
    34     public void heapSelectionSort(double[] sorted) {
    35         int sortedLen = sorted.length;
    36 
    37         for (int i = sortedLen / 2; i > 0; i--) {
    38             heapAdjust(sorted, i, sortedLen);
    39         }
    40         for (int i = sortedLen; i > 1; --i) {
    41             exchange(sorted, 1, i);
    42             heapAdjust(sorted, 1, i - 1);
    43         }
    44     }
    45 
    46     public void heapAdjust(double[] sorted, int start, int end) {
    47         if (start < end) {
    48             double temp = sorted[start];
    49             // 这个地方j<end与课本不同,j<=end会报错:
    50             for (int j = 2 * start; j < end; j *= 2) {
    51                 if (j + 1 < end && sorted[j] - sorted[j + 1] > 10e-6) {
    52                     ++j;
    53                 }
    54                 if (temp <= sorted[j]) {
    55                     break;
    56                 }
    57                 sorted[start] = sorted[j];
    58                 start = j;
    59             }
    60             sorted[start] = temp;
    61         }
    62     }
    63 
    64 }
  • 相关阅读:
    python之openpyxl模块(最全总结 足够初次使用)
    随笔 遇见
    浅析企业服务器安全防护的七个切入点
    jQuery.API源码深入剖析以及应用实现(1) - 核心函数篇
    常用Javascript精选(二)
    随笔 生活与生命
    jquery插件 8个很有用的jQuery插件
    jquery插件 5个小插件
    常用Javascript精选(一)
    jQuery库与其他JS库冲突的解决办法(转)
  • 原文地址:https://www.cnblogs.com/perfy/p/3069192.html
Copyright © 2011-2022 走看看