直接贴代码

快排:

  1. public class Test {
  2. private static void sort(int[] nums){
  3. if(nums == null || nums.length == 0){
  4. return;
  5. }
  6. quickSort(nums, 0, nums.length-1);
  7. }
  8.  
  9. private static void quickSort(int[] nums, int start, int end) {
  10. int low = start;
  11. int high = end;
  12. int temp = nums[start];
  13. while(start<end){
  14. while (start<end && nums[end]>=temp){
  15. end--;
  16. }
  17. swap(nums, start, end);
  18. while(start<end && nums[start]<=temp){
  19. start++;
  20. }
  21. swap(nums, start, end);
  22. }
  23. if(start-1>low) {
  24. quickSort(nums, low, start - 1);
  25. }
  26. if(high>start+1) {
  27. quickSort(nums, start + 1, high);
  28. }
  29. }
  30.  
  31. private static void swap(int[] nums, int i, int j){
  32. int temp = nums[i];
  33. nums[i] = nums[j];
  34. nums[j] = temp;
  35. }
  36.  
  37. public static void main(String [] args){
  38. int[] nums = {49,22,34, 6,22,19,3,19};
  39. sort(nums);
  40. for(int i=0;i<nums.length;i++){
  41. System.out.print(nums[i]+“ ”);
  42. }
  43.  
  44. }
  45. }

冒泡:

  1. private static void bubbleSort(int[] num){
  2. for(int i = 0 ; i < num.length ; i ++) {
  3. for(int j = 0 ; j < num.length - i - 1 ; j ++){
  4. if(num[j]>num[j+1]){
  5. swap(num, j , j+1);
  6. }
  7. }
  8. }
  9. }

改进冒泡:

  1. public void bubbleSort(int arr[]) {
  2. boolean didSwap;
  3. for(int i = 0, len = arr.length; i < len - 1; i++) {
  4. didSwap = false;
  5. for(int j = 0; j < len - i - 1; j++) {
  6. if(arr[j + 1] < arr[j]) {
  7. swap(arr, j, j + 1);
  8. didSwap = true;
  9. }
  10. }
  11. if(didSwap == false)
  12. return;
  13. }
  14. }

改进后的冒泡排序最佳情况下时间复杂度为O(n)

希尔排序:

  1. private static void shellSort(int[] nums){
  2. for(int d = nums.length/2 ; d > 0 ; d = d / 2){
  3. for(int i = d ; i < nums.length ; i ++){
  4. for(int j = i; j>=d; j = j-d){
  5. if (nums[j] < nums[j - d]) {
  6. swap(nums, j - d, j);
  7. }else{
  8. break;
  9. }
  10. }
  11. }
  12. }
  13. }

归并排序:

  1. private static void mergeSort(int[] nums, int low, int high){
  2. if(low>=high){
  3. return;
  4. }
  5. int mid = (low+high)/2;
  6. mergeSort(nums, low, mid);
  7. mergeSort(nums, mid + 1, high);
  8. merge(nums,low, mid, high);
  9. }
  10.  
  11. private static void merge(int[] nums, int low, int mid, int high){
  12. int[] temp = new int[high-low+1];
  13. int i = low;
  14. int j = mid+1;
  15. int k = 0;
  16. while(i<=mid&&j<=high){
  17. if(nums[i]<nums[j]){
  18. temp[k++] = nums[i++];
  19. }else{
  20. temp[k++] = nums[j++];
  21. }
  22. }
  23. while(i<=mid){
  24. temp[k++] = nums[i++];
  25. }
  26. while(j<=high){
  27. temp[k++] = nums[j++];
  28. }
  29. for(int p = 0 ; p < temp.length ; p++){
  30. nums[low+p] = temp[p];
  31. }
  32. }

java——快排、冒泡、希尔、归并的更多相关文章

  1. Java 快排

    基于分治法的快排,用递归实现. 首先讲一下实现的过程. 1.在数组中取一个数作为基准,所谓的基准就是用来对比的数. 2.然后在数组中从后往前找,找到一个逆序数为止,找到之后就把它的值赋值到基准数的位, ...

  2. Java 快排 排序

    一.快排的一种 ==================== public class myMain { public static void main(String[] args) { int t[] ...

  3. java快排(两种方法)

    快排是最基础的排序算法之一,今天来回顾一下. public class QuickSort { public static void quickSort(int[] array){ if(array ...

  4. [排序] 快排 && 冒泡(自己写)

    #include <iostream> using namespace std; /* 快速排序 通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分 再分 ...

  5. JS算法之快排&冒泡

    1.快速排序思想: 1.1 先找数组的最中间的一个数为基准 1.2 把数组通过此基准分为小于基准的left数组和大于基准的right数组, 1.3 递归重复上面的两个步骤, 代码如下: functio ...

  6. java快排思想

    1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 }

  7. 使用Python完成排序(快排法、归并法)

    class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ...

  8. Java快排

    package quickSort; /** * 快速排序 * @author root * */ public class QuickSort { static int[] data = {0,2, ...

  9. Java 排序(快排,归并)

    Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ...

随机推荐

  1. Struts 第一天

    请简述下Struts2 的执行流程. 首先是,启动tomcat服务器,这时候会加载web.xml,当读到filter标签时,会创建过滤器对象.struts2的核心过滤器(StrutsPrepareAn ...

  2. hibernate第三天 一对多 , 多对多

    1.1. 阐述你对inverse的理解 答: 1.inverse的默认值是false,代表不放弃外键维护权,配置值为true,代表放弃了外键的维护权. 2.双方维护外键会多产生update语句,造成浪 ...

  3. p3253 [JLOI2013]删除物品

    传送门 分析 我们发现两个栈可以看作一个数组,而栈顶则是将这个数组拆成两个栈的分割点. 于是每次移动就变成了分割点的移动,每次移动时都统计下目的分割点和当前分割点之间的物品数目即可. 代码 #incl ...

  4. 机器学习初探(手写数字识别)matlab读取数据集

    手写数字识别是机器学习里面的一个经典问题,今天就这一段时间学习的机器学习,花一个下午茶的时间,试试机器学习. 首先数据库是在MNIST(http://yann.lecun.com/exdb/mnist ...

  5. 《Head First Servlets & JSP》-5-属性和监听

    Servlet初始化参数 在DD文件(web.xml)中 Servlet参数在/参数下: 在Servlet代码中 在Servlet初始化之前不能使用Servlet初始化参数 一旦有了一个Servlet ...

  6. Android应用启动优化:一种DelayLoad的实现和原理

    http://www.androidperformance.com/2015/11/18/Android-app-lunch-optimize-delay-load.html

  7. android studio中Fragment使用webview返回上一页的问题

    在Fragment中使用了腾讯的X5 webview,虽然好用,但是在Fragment中传递消息困难,想要返回上一页,还得各种消息传递什么的,麻烦.可是在Fragment中又不能使用onKeyDown ...

  8. 通过ajax把json对象传入后台

    一.前台ajax部分 function icheckDelete(url){ var parms = { list : array //这是个数组 }; $.ajax({ dataType: &quo ...

  9. BIO与NIO的方式实现文件拷贝

    面试题 - 编程实现文件拷贝.(这个题目在笔试的时候经常出现,下面的代码给出了两种实现方案) import java.io.FileInputStream; import java.io.FileOu ...

  10. snmp snmp4j的使用

    snmp4j的使用 一.什么是snmp及snmp4j? snmp是 Simple Network Management Protocol (简单网络管理协议)的简写. SNMP4J是一个用Java来实 ...