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
- 常见排序算法的java实现
- 常见经典排序算法的java实现
- 常见排序算法的java实现
- 常见内排序算法的java实现
- 常见排序算法的Java实现
- 常见的排序算法,Java实现
- Java实现常见的排序算法
- Java实现常见的排序算法
- 常见的排序算法 Java实现
- Java实现常见的排序算法
- 常见排序算法--java实现
- java实现常见排序算法
- Java实现常见排序算法
- 常见排序算法java实现
- 常见排序算法java实现
- Java实现常见的排序算法---归并排序
- Java实现常见的排序算法--堆排序
- 常见排序算法的实现
- 关于大三找实习的一些思考
- 深化Java基础之——数组与内存控制
- Java I/O 学习总结(一)
- Java I/O 学习总结(二)
- 深化Java基础之——对象与内存控制
- Java实现常见的排序算法
- 栈
- (SystemJS) Can't resolve all parameters for
- @Autowired默认规则
- 关于Office Professional Plus 2013 VOL 和Office Professional Plus 2013
- wget 无法建立ssl连接 ERROR: certificate common name “a.ssl.fastly.net”
- service的简介
- AlexNet论文翻译与解读
- 微信小程序登录页动画-云层漂浮