《算法》选择排序、插入排序、冒泡排序

1.选择排序

//选择排序,《算法》p156
package algorithm;

public class Selection_p156{
    public  void sort(int[] a){
        int N = a.length;//数组长度
        for(int i = 0; i < N-1; i++){
            for(int j = i+1; j < N; j++){
                if(a[j] < a[i]){
                    int temp = a[j];
                    a[j] = a[i];
                    a[i] = temp;
                }
            }
        }
        for(int i = 0; i < N; i++){
            System.out.println(a[i]);
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Selection_p156 test = new Selection_p156 ();
        int[] a = {5,4,3,2,1};
        test.sort(a);
    }
}

思路
将第一个元素与剩余所有元素相比,如果有比第一个元素小的,则互换
再将第二个元素与剩余所有元素相比,如果有比第二个元素小的,则互换
……

2.插入排序

//插入排序,《算法》p1
package algorithm;

public class Insertion_p157 {
    public void sort(int[] a){
        int N = a.length;
        for(int i = 1; i < N; i++){
            for(int j = i; j > 0; j--){
                if (a[j] < a[j-1])
                {
                    int temp = a[j];
                    a[j] = a[j-1];
                    a[j-1] = temp;
                }
            }
        }
        for(int i = 0; i < N; i++){
            System.out.println(a[i]);
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Insertion_p157 test = new Insertion_p157();
        int[] a = {5,4,3,2,1};
        test.sort(a);
    }

}

思路
将第i个元素插入到前i-1个元素的适当位置中,插入过程为
当前元素小于上一个元素时,则互换位置,不小于时就开始将第i+1个元素插入到前i个元素的适当位置中。

3.冒泡排序

//冒泡排序
package algorithm;

public class Bubble {
    public void sort(int[] a){
        int N = a.length;
        for(int i = 0; i < a.length-1; i++){
            for(int j = 0; j < a.length-1-i; j++){
                if (a[j] > a[j+1]){
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }               
        }
        for(int i = 0; i < N; i++){
            System.out.println(a[i]);
        }

    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Bubble test = new Bubble();
        int[] a = {5,4,3,2,1};
        test.sort(a);
    }
}

思路
第一次循环将最大的数排到最后一个,第二次循环将第二大的数排到倒数第二个……
每次循环都从第一个元素开始相邻元素进行比较,如果当前元素比下一个元素更大,则互换,如不大于,则比较下一个和下下个元素……

点赞