一 选择排序
原理:选择排序很简单,他的步骤如下:
- 从左至右遍历,找到最小(大)的元素,然后与第一个元素交换。
- 从剩余未排序元素中继续寻找最小(大)元素,然后与第二个元素进行交换。
- 以此类推,直到所有元素均排序完毕。
之所以称之为选择排序,是因为每一次遍历未排序的序列我们总是从中选择出最小的元素。下面是选择排序的动画演示:
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); } }