Java实现常见的排序算法
这些基础的东西,不总结很快就忘了,本文的代码我都会加上详细的注释~
首先先向大家推荐一个网站,一个动态演示各种常见排序算法流程的网站 http://jsdo.it/norahiko/oxIy/fullscreen,排序过程一目了然!
直接插入排序
基本思想:从数组的第二个元素开始,若比前一个元素小,就向前移动(若大于就不用移动),直到插入到合适的位置,然后再去排第三个元素,依次类推,最后一个插入到合适位置时,数组的排序就完成了。时间复杂度为O(n^2)。
图形演示:

1、如上图所示,初始数组中有6个元素,从第二个元素开始遍历,17小于20,所以交换位置。
2、第一步过后已排序的数为17,20。接下来4依次向前比较,都比前两个数小,一直向前移动,如上图第二步所示。
后面的步骤一样重复,找到每个元素合适的位置,最后排序完成。
Java代码实现:
1 /** 2 * 直接插入排序,时间复杂度O(n^2) 3 * @param nums 待排序数组 4 */ 5 public static void insertSort(int[] nums){ 6 int temp = 0; //保存遍历到的元素 7 int j = 0; //移动标记元素下标 8 for(int i=1; i<nums.length; i++){ //从数组第二个开始往后遍历 9 temp = nums[i]; //将要比较的元素赋值给temp 10 for(j=i; j>0 && temp<nums[j-1]; j--){ //从该元素开始向前遍历,满足该元素比前一个要小 11 nums[j] = nums[j-1]; //前一个较大的元素换到 j 下标位置 12 } 13 nums[j] = temp; //上述条件不满足时的 j 下标位置就是temp适合的位置,temp保存元素插入到此 14 } 15 System.out.println(Arrays.toString(nums)); 16 }
冒泡排序
基本思想:从第一个元素开始,与下一个元素比较,若大于则交换位置,小于则不动,所以会经过n-1趟排序,每一趟会把大的元素沉底,小的元素浮上来,所以叫冒泡排序。
图形演示:

一共6个元素,需要进行5趟排序。上图是每趟排序之后的结果,后面是每趟排序要比较的次数,红色为每趟排序结束后沉底的元素(下一趟不参与比较,已经有序)。
Java代码:
1 /** 2 * 冒泡排序,时间复杂度O(n^2) 3 * @param nums 4 */ 5 public static void bubbleSort(int[] nums){ 6 int temp = 0; 7 for(int i=0; i<nums.length-1; i++){ //n个数要循环n-1趟 8 for(int j=0; j<nums.length-1-i; j++){ //每循环一趟,每趟的比较次数减 1 9 if(nums[j] > nums[j+1]){ //比后一个元素大,就交换两数位置 10 temp = nums[j]; 11 nums[j] = nums[j+1]; 12 nums[j+1] = temp; 13 } 14 } 15 } 16 printArray(nums); 17 }
快速排序
基本思想:设定比较范围low,high,选取一个元素作为枢轴,其他元素依次和枢轴比较,比其大的放在后面,比其小的放在前面,比较的过程中,low和high不断向中间移动,直到low = high,一次排序结束,此时枢轴在中间,左边的元素都比它小,右边的元素都比它大。接下来对左右两边进行同样的操作(递归),直到所有元素排好序。

浙公网安备 33010602011771号