选择排序
将要排序的数组分成两部分,一部分是从小到大已经排好序的,一部分是无序的,
从无序的部分取出最小的数值,放到已经排好序的部分的最后。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class ChooseSort{ public static void sort(int[] arr){ int t; for(int i=0;i<arr.length;i++){ int m = i; for(int j=i+1;j<arr.length;j++){ if(arr[j]<arr[m]){ m = j; } } if(i != m){ t = arr[i]; arr[i] = arr[m]; arr[m] = t; } } System.out.println(Arrays.toString(arr)); } }
|
冒泡排序
从数组中扫描待排序的元素,扫描过程中依次对相邻元素进行比较,将数值大的元素后移。
每经过一趟排序后,数值最大的元素将移到末尾,此时加下该元素的位置,下一趟排序
只需要比较到此位置为止,直到所有元素都已有序排列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class BubblingSort{ public static void sort(int[] arr){ int t; for (int i=0 ;i<arr.length;i++){ for (int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ t = arr[j]; arr[j] = arr[j+1]; arr[j+1]=t; } } } System.out.println(Arrays.toString(arr)); } }
|
插入算法
将排序的数组分成两部分,每次从后面的数组部分中去除索引最小的数组元素,
插入到前面数组部分的适当位置中。通常在开始排序时,将数组的第一个元素
作为一组,后面的所有元素被当成一组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class InsertSort{ public static void sort(int[] arr){ for(int i = 1;i<arr.length;i++){ int temp = arr[i]; int j = i - 1; while (temp < arr[j]){ arr[j+1] = arr[j]; j--; if(j==-1){ break; } } arr[j+1] = temp; } System.out.println(Arrays.toString(arr)); } }
|
快速排序
被认为是最好的排序方式之一
基本思路为:将一个大的数组的排序问题,分解成两个小数组的排序
而每个小数组的排序又可以继续分解成更小的2个数组,这样一直递归分解下去,
直到数组的大小最大为2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class FastSort{ public static int[] sort(int[] arr,int left,int right){ int t; if(left<right){ int s = arr[left]; int i = left; int j = right+1; while (true){ while (i+1<arr.length&&arr[++i]<s); while (j-i>-1 && arr[--j]>s); if(i>=j){ break; }else { t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } arr[left] = arr[j]; arr[j] = s; sort(arr,left,j-1); sort(arr,j+1,right); } return arr; } }
|
测试
1 2 3 4 5 6 7 8 9 10
| public class Sort { public static void main(String[] args) { int []arr = {10,7,8,5,2,4,7,3,1,6}; InsertSort.sort(arr); } }
|