Java实现常见的排序算法

这些基础的东西,不总结很快就忘了,本文的代码我都会加上详细的注释~

首先先向大家推荐一个网站,一个动态演示各种常见排序算法流程的网站  http://jsdo.it/norahiko/oxIy/fullscreen,排序过程一目了然!

直接插入排序

基本思想:从数组的第二个元素开始,若比前一个元素小,就向前移动(若大于就不用移动),直到插入到合适的位置,然后再去排第三个元素,依次类推,最后一个插入到合适位置时,数组的排序就完成了。时间复杂度为O(n^2)。

图形演示:

Java实现常见的排序算法_第1张图片

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//从数组第二个开始往后遍历
 9             temp = nums[i];  //将要比较的元素赋值给temp
10             for(j=i; j>0 && temp//从该元素开始向前遍历,满足该元素比前一个要小
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趟排序,每一趟会把大的元素沉底,小的元素浮上来,所以叫冒泡排序。

图形演示:

Java实现常见的排序算法_第2张图片

一共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//n个数要循环n-1趟
 8             for(int j=0; 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     }

 

快速排序

基本思想:选取一个元素作为枢轴,

你可能感兴趣的:(Java实现常见的排序算法)