Java实现常见的排序算法

来源:互联网 发布:二手域名 编辑:程序博客网 时间:2024/03/29 08:06
这些基础的东西,不总结很快就忘了,本文的代码我都会加上详细的注释~

首先先向大家推荐一个网站,一个动态演示各种常见排序算法流程的网站  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];  //将要比较的元素赋值给temp10             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     }

 

快速排序

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

0 0
原创粉丝点击