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 }
  • 相关阅读:
    Linux 使用crontab定时备份Mysql数据库
    pdf.js 文字丢失问题 .cmaps
    indexOf IE8下的兼容
    Huplaodfiy---图片文件上传插件修改
    dateTimePicker日期时间插件-----限定节假日调休的可选择性
    【转】MyEclipse第一个Servlet程序
    input 的 placeholder属性在IE8下的兼容处理
    zepto的scrollTo,实现锚点跳转
    微信小程序
    mac 终端中添加tree命令显示文件目录结构
  • 原文地址:https://www.cnblogs.com/perfy/p/3069192.html
Copyright © 2011-2022 走看看