java——快排、冒泡、希尔、归并
直接贴代码
快排:
public class Test {
    private static void sort(int[] nums){
        if(nums == null || nums.length == 0){
            return;
        }
        quickSort(nums, 0, nums.length-1);
    }
    private static void quickSort(int[] nums, int start, int end) {
        int low = start;
        int high = end;
        int temp = nums[start];
        while(start<end){
            while (start<end && nums[end]>=temp){
                end--;
            }
            swap(nums, start, end);
            while(start<end && nums[start]<=temp){
                start++;
            }
            swap(nums, start, end);
        }
        if(start-1>low) {
            quickSort(nums, low, start - 1);
        }
        if(high>start+1) {
            quickSort(nums, start + 1, high);
        }
    }
    private static void swap(int[] nums, int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
    public static void main(String [] args){
        int[] nums = {49,22,34, 6,22,19,3,19};
        sort(nums);
        for(int i=0;i<nums.length;i++){
            System.out.print(nums[i]+“ ”);
        }
    }
}
冒泡:
private static void bubbleSort(int[] num){
        for(int i = 0 ; i < num.length ; i ++) {
            for(int j = 0 ; j < num.length - i - 1 ; j ++){
                if(num[j]>num[j+1]){
                    swap(num, j , j+1);
                }
            }
        }
    }
改进冒泡:
public void bubbleSort(int arr[]) {
    boolean didSwap;
    for(int i = 0, len = arr.length; i < len - 1; i++) {
        didSwap = false;
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
                didSwap = true;
            }
        }
        if(didSwap == false)
            return;
    }
}
改进后的冒泡排序最佳情况下时间复杂度为O(n)
希尔排序:
    private static void shellSort(int[] nums){
        for(int d = nums.length/2 ; d > 0 ; d = d / 2){
            for(int i = d ; i < nums.length ; i ++){
                for(int j = i; j>=d; j = j-d){
                    if (nums[j] < nums[j - d]) {
                        swap(nums, j - d, j);
                    }else{
                        break;
                    }
                }
            }
        }
    }
归并排序:
    private static void mergeSort(int[] nums, int low, int high){
        if(low>=high){
            return;
        }
        int mid = (low+high)/2;
        mergeSort(nums, low, mid);
        mergeSort(nums, mid + 1, high);
        merge(nums,low, mid, high);
    }
    private static void merge(int[] nums, int low, int mid, int high){
        int[] temp = new int[high-low+1];
        int i = low;
        int j = mid+1;
        int k = 0;
        while(i<=mid&&j<=high){
            if(nums[i]<nums[j]){
                temp[k++] = nums[i++];
            }else{
                temp[k++] = nums[j++];
            }
        }
        while(i<=mid){
            temp[k++] = nums[i++];
        }
        while(j<=high){
            temp[k++] = nums[j++];
        }
        for(int p = 0 ; p < temp.length ; p++){
            nums[low+p] = temp[p];
        }
    }
java——快排、冒泡、希尔、归并的更多相关文章
- Java 快排
		基于分治法的快排,用递归实现. 首先讲一下实现的过程. 1.在数组中取一个数作为基准,所谓的基准就是用来对比的数. 2.然后在数组中从后往前找,找到一个逆序数为止,找到之后就把它的值赋值到基准数的位, ... 
- Java  快排 排序
		一.快排的一种 ==================== public class myMain { public static void main(String[] args) { int t[] ... 
- java快排(两种方法)
		快排是最基础的排序算法之一,今天来回顾一下. public class QuickSort { public static void quickSort(int[] array){ if(array ... 
- [排序] 快排 && 冒泡(自己写)
		#include <iostream> using namespace std; /* 快速排序 通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分 再分 ... 
- JS算法之快排&冒泡
		1.快速排序思想: 1.1 先找数组的最中间的一个数为基准 1.2 把数组通过此基准分为小于基准的left数组和大于基准的right数组, 1.3 递归重复上面的两个步骤, 代码如下: functio ... 
- java快排思想
		1分治思想 1.1比大小在分区 1.2从数组中取出一个数做基准数 1.3将比他小的数全放在他的左边,比他大的数全放在他的右边 1.4然后递归 左边 和右边 } 
- 使用Python完成排序(快排法、归并法)
		class Sort(object): def quick_sort(self, ls): self.quick_sort_helper(ls, 0, len(ls) - 1) return ls d ... 
- Java快排
		package quickSort; /** * 快速排序 * @author root * */ public class QuickSort { static int[] data = {0,2, ... 
- Java 排序(快排,归并)
		Java 排序有Java.util.Arrays的sort方法,具体查看JDK API(一般都是用快排实现的,有的是用归并) package yxy; import java.util.Arrays; ... 
随机推荐
- vs2010 怎样设置文本编辑窗口和解决方案资源管理器同步?
			即切换左边的文本编辑窗口,解决方案资源管理器如何定位到相应的文件项上?答案: 工具--选项--项目和解决方案--常规--在解决方案资源管理器中跟踪活动项(前打勾)确定 应该就可以了. 
- dd相关命令
			用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换. if= 输入文件或设备名称 eg:if=u-boot-with-spl.bin of=输出文件或设备名称 eg:of=/dev/sdb bs ... 
- Java代码执行机制
			一.java源码编译机制 一个java文件编译为.class文件的流程图. Parse an Enter阶段: Parse:将代码字符串转换为token序列(com.sun.tools.javac.p ... 
- 国内物联网平台(6):庆科云FogCloud
			国内物联网平台(6)——庆科云FogCloud 马智 平台定位 FogCloud 快速接入智能硬件 FogCloud为开发者提供便捷的智能硬件接入服务,真正实现敏捷开发,快速迭代. FogCloud提 ... 
- EIP权限工作流升级说明-2019/3/5
			首页增加待办事项直接处理按钮 2,新增处理历史记录 
- FileInfo类和DirectoryInfo类
			FileInfo类和DirectoryInfo类可以方便地对文件和文件夹进行操作. 1. FileInfo类(非静态类) FileInfo类和File类之间许多方法调用都是相同的,但是FileInfo ... 
- VSCode配置JAVA开发环境
			VSCode配置JAVA开发环境 1:给机器安装JDK.MAVEN 下载JDK 下载路径:https://www.oracle.com/technetwork/java/javase/download ... 
- 自定义等高 Cell
			1.介绍 1.1 代码自定义 cell(使用 frame) 创建一个继承自 UITableViewCell 的子类,比如 BookCell1. 在 initWithStyle:reuseIdentif ... 
- ReentrantReadWriteLock原理
			原文链接:https://www.jianshu.com/p/9f98299a17a5 前言 本篇适用于了解ReentrantLock或ReentrantReadWriteLock的使用,但想要进一步 ... 
- P4015 运输问题
			\(\color{#0066ff}{题目描述}\) W 公司有 m 个仓库和 n 个零售商店.第 i 个仓库有 \(a_i\) 个单位的货物:第 j 个零售商店需要 \(b_j\) 个单位的货物. 货 ... 
