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; ...
随机推荐
- 项目一:第十三天 1、菜单数据管理 2、权限数据管理 3、角色数据管理 4、用户数据管理 5、在realm中动态查询用户权限,角色 6、Shiro中整合ehcache缓存权限数据
1 课程计划 菜单数据管理 权限数据管理 角色数据管理 用户数据管理 在realm中动态查询用户权限,角色 Shiro中整合ehcache缓存权限数据 2 菜单数据添加 2.1 使用c ...
- ROS Learning-026 (提高篇-004 A Mobile Base-02) 控制移动平台 --- “分封制”
ROS 提高篇 之 A Mobile Base-02 - 控制移动平台 - "分封制" 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ub ...
- vue 之 Nodejs介绍
Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一个基于 Chrome V8 ...
- 巧用 git rebase 合并多个 commit。
一.为什么需要合并多个 commit 呢? 有时候,我们开发一个功能. 修修补补 commit 了很多次,过多的 commit 会显得很复杂. 不够直观,不能比较清晰查看那些 commit 是对应 ...
- javax.servlet.ServletConfig接口(五)
主要作用是保存web.xml文件里面的配置信息 一个servlet对应一个ServletConfig,100个servlet对应100个ServletConfig. 代码如下(单个获取和获取所有) ...
- 移除HTML标签(CharacterUtility)类库
最近时间,专案需要,写了一个类库,主要是为了移除HTML标签以及截取前一段文本的类库. 下载地址:http://download.cnblogs.com/insus/Library/Character ...
- 使用穷人版profiler定位调试MySQL
此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 周末闲得蛋疼,来英飞特做人工空气净化器.开了电脑后,习惯性得点击xshell按钮,进入InnoSQL稳定性测 ...
- hdu4658(广义五边形&分割函数2)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4658 题意:f(x) 为将 x 分成其他数和的形式的方案数.对于 t 组输入,输出 f(xi, k), ...
- 用户、组或角色 'zgb' 在当前数据库中已存在。 (Microsoft SQL Server,错误: 15023)
在使用SQL Server 时,我们经常会遇到一个情况:需要把一台服务器上的数据库转移到另外一台服务器上.而转移完成后,需要给一个"登录"关联一个"用户"时,往 ...
- 老男孩Day2作业:购物车程序
作业需求: 用户入口: 1.商品信息存在文件里 2.已购商品,余额记录.第一次启动程序时需要记录工资,第二次启动程序时谈出上次余额 3.允许用户根据商品编号购买商品 4.用户选择商品后,检测是否够,够 ...