簡單排序演算法

碼小呆alon發表於2020-11-27
  • 概念:將一組無序的數列,排序成有序數列,升序列和降序列。

升序:後面的值一定比前面任意一個值要大。

1,7,9,10,11,12,19,20,21

降序:後面的值一定比前面任意一個值要小。

20,19,8,7,5,1.0,-1

一、氣泡排序

1.1 概念

概念:將相鄰的兩個元素進行比較,以升序列為例,如果前面的值比後面的值大了,則兩者交換,否則不交換。

比如:7,9,6,10,11,5,4

排序為升序列:4,5,6,7,9,10,11

1.2 氣泡排序圖解

image.png

1.3 實現程式碼

public class BubbleSort {
    public static void main(String[] args) {
        int[] num = {7,9,6,10,11,5,4};
        System.out.print("排序前:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
        
        //排序:
        for(int i = 0;i < num.length;i++) {
            for(int j = 0;j < num.length-1-i;j++) {
                if(num[j] > num[j+1]) {
                    int temp = num[j];
                    num[j] = num[j+1];
                    num[j+1] = temp;
                }
            }
        }
        
        System.out.println();
        System.out.print("排序後:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
    }
}

二、選擇排序

2.1 概念

依次取到陣列的每一個下標,用該下標的後面所有元素與該下標的元素進行比較,如果是升序列,該下標元素值比後面元素值大了,則兩者交換。否則不交換。

2.2 選擇排序圖解

image.png

2.3 實現程式碼

public class SelectSort {
    public static void main(String[] args) {
        int[] num = {1,11,9,8,3,2,7};
        System.out.print("排序前:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
        //排序:
        for(int i = 0, len = num.length-1;i < len;i++) {
            for(int j = i+1;j < num.length;j++) {
                if(num[i] > num[j]) {
                    int temp = num[i];
                    num[i] = num[j];
                    num[j] = temp;
                }
            }
        }
        System.out.println();
        System.out.print("排序後:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
    }
}

三、插入排序

3.1 概念

1)把所有的元素分為兩組,已排序和未排序的。

2)找到未排序的組中的第一個元素,向已經排序的陣列中進行插入。

3)倒敘遍歷已經排序的元素,一次和待插入的元素進行比較,知道找到一個元素小於等於待插入元素,那麼就把待插入元素放到這個位置。

3.2 插入排序圖解

image.png

圖示說明:首先將第一個元素定義為已排序的組,其餘的元素為未排序的組,接下來每次取未排序組裡面的第一個元素,從已排序組裡面倒著遍歷,將遍歷到的元素和選出未排序的第一個元素進行比較,如果前者比後者元素值大,則兩者交換,直到該元素在已排序元素中遇到比它還小或者等於的元素,結束。

3.3 實現程式碼

/**
 * 
 * <p>Title: InsertSort</p> 
 * <p>Description: 插入排序</p> 
 * @author Alon
 * @date 2020年8月2日 下午4:07:58
 * @version 1.0
 */
public class InsertSort {
    
    public static void main(String[] args) {
        //排序:
        sort();
    }
    
    /**
     * 
     *<p>Title: sort</p> 
     *<p>Description: 插入排序</p>
     */
    public static void sort() {
        //定義一個陣列
        int[] num = {4,3,2,10,12,1,5,6};
        //排序前:
        System.out.print("排序前:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
        
        //排序:外層排序表示取到從1及以後的每一個下標索引,i處值實際為未排序的第一個元素
        for(int i = 1;i < num.length;i++) {
            //內層迴圈是倒著遍歷已排序的組
            for(int j = i;j > 0;j--) {
                //比較,用未排序中的第一個元素和已排序中的每一個元素比較
                if(num[j-1] > num[j]) {
                    //交換
                    int temp = num[j-1];
                    num[j-1] = num[j];
                    num[j] = temp;
                }else {
                    //否則說明找到了比自己小於或者等於的元素了,停止內層迴圈
                    break;
                }
            }
        }
        System.out.println();
        System.out.print("排序後:");
        for(int i = 0;i < num.length;i++) {
            System.out.print(num[i]+",");
        }
    }
}

聯絡郵箱:alon_note@163.com

公眾號:菜鳥崛起

相關文章