一 选择排序

原理:选择排序很简单,他的步骤如下:

  1. 从左至右遍历,找到最小(大)的元素,然后与第一个元素交换。
  2. 从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换。
  3. 以此类推,直到所有元素均排序完毕。

 之所以称之为选择排序,是因为每一次遍历未排序的序列我们总是从中选择出最小的元素。下面是选择排序的动画演示:

基本排序算法<一>

 

public class Sort {
     //选择排序
    public static void SelectionSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < n; i++) {
            int min = i; // 从第i+1个元素开始,找最小值
            for (int j = i + 1; j < n; j++) {
                if (array[min] > array[j])
                    min = j;
            }
            Swap(array, i, min);
        }
    }
     //插入排序
    public static void insertionSort(int[] array){
        int n = array.length;
        for (int i =1; i < n; i++) {
            for (int j = i; j >0; j--) {
                if (array[j] < array[j-1])
                    Swap(array, j, j-1);
                else
                    break;
            }    
        }
    }
     //冒泡排序
    public static void bubbleSort(int[] array){
        int n = array.length;
        for (int i =0; i < n; i++) {
            for (int j = n-1; j >i; j--) {
                if (array[j] < array[j-1])
                    Swap(array, j, j-1);
            }    
        }
    }
     //希尔排序
     public static void shellSort(int[] arr){
          int N=arr.length;
          int h=1;
          while(h<N/3){
              h=3*h+1;
          }
          while (h>=1) {
              for(int i =h; i <N; i++) {
                  for (int j =i; j>=h&&(arr[j]<arr[j-h]); j-=h) {
                          swap(arr, j, j-h);    
                  }
              }
              h=h/3;
          }
      }
    private static void Swap(int[] array, int i, int min) {
        int temp = array[i];
        array[i] = array[min];
        array[min] = temp;
    }
    private static void printArr(int[] array){
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        int[] array = new int[] { 1, 3, 1, 4, 2, 4, 2, 3, 2, 4, 7, 6, 6, 7, 5,5, 7, 7 };
        System.out.println("Before Sort:");
        printArr(array);
        //SelectionSort(array);
        //insertionSort(array);
        bubbleSort(array);
        System.out.println("After Sort:");
        printArr(array);
    }
}
View Code

相关文章: