`
xiaolong0211
  • 浏览: 334361 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

关于排序之选择排序

阅读更多
选择排序:
分为直接选择排序, 堆排序
 
直接选择排序 :第i次选取( i到array.Length-1中间)最小的值,放在i位置。
 
堆排序 : 首先,数组里面用层次遍历的顺序放一棵完全二叉树。从最后一个非终端结点往前面调整,直到到达根结点,这个时候除根节点以外的所有非终端节点都已经满足堆 得条件了,于是需要调整根节点使得整个树满足堆得条件,于是从根节点开始,沿着它的儿子们往下面走(最大堆沿着最大的儿子走,最小堆沿着最小的儿子走)。 主程序里面,首先从最后一个非终端节点开始调整到根也调整完,形成一个heap, 然后将heap的根放到后面去(即:每次的树大小会变化,但是 root都是在1的位置,以方便计算儿子们的index,所以如果需要升序排列,则要逐步大顶堆。因为根节点被一个个放在后面去了。降序排列则要建立小顶 堆)
 
直接选择排序的源代码:
package com.zhaozy.sort;
 
import java.util.Random;
/**
 * 直接选择排序
 * @author zhaozy
 *
 */
public class StraitSelectionSort {
   public static void main(String[] args) {
     Random random = new Random();
     int [] dataset = new int [10];
     System. out .println( " 原始数据为: " );
     for ( int i = 0; i < dataset. length ; i++) {
        dataset[i] = ( int ) (random.nextDouble() * 100);
        System. out .print(dataset[i] + " " );
     }
     System. out .println();
     StraitSelectionSort strait = new StraitSelectionSort();
     for ( int i = 0; i < dataset. length ; i++) {
        // 找出 dataset [i] 之后小于它的值的下标
        int minIndex = strait.getMindIndex(dataset, i);
       // 和 dataset [i] 交换位置,如果之后没有比 dataset [i] 小的数,即 dataset [i] 和 dataset [i] 交换
        strait.exchange(dataset, i, minIndex);
     }
     System. out .println( " 排好序后: " );
     for ( int i = 0; i < dataset. length ; i++) {
        System. out .print(dataset[i] + " " );
     }
   }
   /*
    * 交换数组中某两个数值的位置的函数
    */
   public void exchange( int [] dataset, int i, int j) {
     if (i < dataset. length && j < dataset. length && i < j && i >= 0
          && j >= 0) {
        int temp = dataset[i];
        dataset[i] = dataset[j];
        dataset[j] = temp;
     }
   }
   /*
    * 找出 dataset [i] 之后小于它的值的下标
    */
   public int getMindIndex( int [] dataset, int i) {
     int minIndex = 0;
     int min = Integer. MAX_VALUE ;
     for ( int j = i; j < dataset. length ; j++) {
        if (dataset[j] < min) {
          min = dataset[j];
          minIndex = j;
        }
     }
     return minIndex;
   }
}

 

到目前为止,自己经历的笔试题中碰到过选择排序(具体方法任选,要是再让我做的话,我当然选择直接选择排序)和快速排序,听同学说他笔试的时候碰到过冒泡排序,不知道其他的排序碰到的几率大不大,以后慢慢看吧。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics