码迷,mamicode.com
首页 > 编程语言 > 详细

重拾java系列一java基础(3)

时间:2015-09-13 23:00:06      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:

  这一章主要复习下以前所接触的算法,

(1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

 1 /**
 2      * 选择排序算法 在未排序序列中找到最小元素,存放到排序序列的起始位置 
 3      * 再从剩余未排序元素中继续寻找最小元素,然后放到前面已排序序列末尾。
 4      * 以此类推,直到所有元素均排序完毕。
 5      * 
 6      * @param numbers
 7      */
 8     public static void selectSort(int[] numbers) {
 9         int size = numbers.length; // 数组长度
10         int temp = 0; // 中间变量
11 
12         for (int i = 0; i < size-1; i++) {//i代表最后排好顺序的index
13             int k = i; // 待确定的位置
14             // 选择出应该在第i个位置的数
15             for (int j = size - 1; j > i; j--) {
16                 if (numbers[j] < numbers[k]) {
17                     k = j;//只要后面的数要比待确定位上的数小,就往前挪到k对应位置
18
19
} 20 } 21 // 交换两个数 22 temp = numbers[i]; 23 numbers[i] = numbers[k]; 24 numbers[k] = temp; 25 } 26 }

 

(2)冒泡排序法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
有重泡下沉和轻泡上浮两种形式:

重泡下沉:

public static void bubbleSort(int[] ary) {
        for (int i = 0; i < ary.length - 1; i++) {
            for (int j = 0; j < ary.length - i - 1; j++) {
                if (ary[j] > ary[j + 1]) {
                    int t = ary[j];
                    ary[j] = ary[j + 1];
                    ary[j + 1] = t;
                }
            }
        }
    }

轻泡上浮:

public static void bubbleSort(int[] ary) {
        for (int i = 0; i < ary.length - 1; i++) {
            for (int j = ary.length - 1; j >0 ; j--) {
                if (ary[j] < ary[j-1]) {
                    int t = ary[j];
                    ary[j] = ary[j - 1];
                    ary[j - 1] = t;
                }
            }
        }
    }

(3)插入排序:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。

 1 public static void insertSort(int[] ary){
 2         int i,j,k;
 3         for(i=1; i<ary.length; i++){
 4             k = ary[i];//step1,先取出作为判断标准
 5             for(j=i-1; j>=0 && ary[j]>k; j--){
 6                 ary[j+1] = ary[j];//step2,移动a[j]-->a[j+1]
 7             }
 8             ary[j+1] = k;//step3,插入,
 9         }
10     }

其他算法请参考:http://www.cnblogs.com/0201zcr/p/4764427.html 

                      http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html

非常感谢原作者

 

重拾java系列一java基础(3)

标签:

原文地址:http://www.cnblogs.com/iliuyuet/p/4803649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!