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

 package yxy;

 import java.util.Arrays;

 public class Test {

     public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arrs = { 1,0,5,9 };
Arrays.sort(arrs);
for (int a : arrs) {
System.out.print(a+"\t");
}
}
}

运行结果:

0    1    5    9    

但是如果我是想让从大到小排序呢,(可以逆序输出吧,一边儿呆着去,我是想让数组自己就从大到小排序)(http://luoqidunwu.iteye.com/blog/1571687

 package yxy;

 import java.util.Arrays;
import java.util.Comparator; class DownCompare implements Comparator<Integer> { @Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
// return o1==02?0:(o1<o2?1:-1);
if (o1.intValue() < o2) {
return 1;
} else if (o1 == o2) {
return 0;
} else {
return -1;
}
} } public class Test { public static void main(String[] args) {
// TODO Auto-generated method stub
Integer[] arrs = { 1, 0, 5, 9 };
Arrays.sort(arrs, new DownCompare());
for (int a : arrs) {
System.out.print(a + "\t");
}
}
}

运行结果:

9    5    1    0    

其实是这个方法,需要写一个类继承Comparator接口

sort(T[] a, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。

如果说自己写快排呢

先说点儿快排稳定性的吧,快排是不稳定的,比如说 5 8(a) 8(b)  1(a) 1(b) 选5作为枢纽元素,排序后1((b)  1(a) 5 8(b)  8(a)

 //参考:http://www.algolist.net/Algorithms/Sorting/Quicksort
package yxy; class QuickSort {
int partition(int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2]; // 选择中间元素作为枢元
//若改为int pivot = left; :则 java.lang.StackOverflowError while (i < j) { //若改为i<=j: 则java.lang.StackOverflowError
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) { //若改为 i<j :则java.lang.StackOverflowError
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
}
return i;
} void quickSort(int arr[], int left, int right) {
if (arr == null || arr.length <= 1)
return;
int index = partition(arr, left, right);
if (left < index)
quickSort(arr, left, index - 1);
if (index < right)
quickSort(arr, index, right);
}
} public class Test2 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 1, 0, 5, 9 };
new QuickSort().quickSort(arr, 0, arr.length - 1);
for (int a : arr) {
System.out.print(a + "\t");
}
} }

对快排不熟悉,为什么改变代码会出现java.lang.StackOverflowError不清楚

明哥给我说的方法,很好理解(下面估计说不清,画个图看看就容易理解了),枢纽元素选择最后一个,然后2个下标指针i,s都指向开始,s的作用是指向i扫描过的第一个比枢纽元素大的位置,i扫描到比枢纽元素小的就和s位置的换,i位置比枢纽元素大的就直接i++

 package yxy;

 class QuickSort {

     void quickSort(int arr[], int left, int right) {
if (arr == null || arr.length <= 1 || left > right) {
return;
}
int i = left, s = left, p = right, tmp; // p指向枢元的位置,i一直往下走,当遇到比arr[p]小的元素时和arr[s]交换
while (i < p) {
if (arr[i] < arr[p]) {
tmp = arr[i]; // 这三句,如果刚开始的元素都小于枢纽元素,则都是自己和自己交换,影响效率,可以判断i和s是否相等,相等就不交换了
arr[i] = arr[s];
arr[s] = tmp;
i++;
s++;
} else {
i++;
}
}
tmp = arr[s];
arr[s] = arr[p];
arr[p] = tmp;
quickSort(arr, left, s - 1);
quickSort(arr, s + 1, right);
}
} public class Test2 { public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 1, 0, 5, 9 };
new QuickSort().quickSort(arr, 0, arr.length - 1);
for (int a : arr) {
System.out.print(a + "\t");
}
} }

12、13、14和21、22、23这么写太麻烦了,写个函数吧

     void swap(int a,int b){
int tmp;
tmp=a;
b=a;
a=tmp;
}

哇,不行哇,哦,java传递参数的问题,记起刚学C时经常碰到这个问题了吧

     void swap(Integer a,Integer b){
Integer tmp;
tmp=a;
b=a;
a=tmp;
}

这个也不行

详情参考:http://bbs.csdn.net/topics/390245117   28楼

归并排序

Java 排序(快排,归并)的更多相关文章

  1. Java实现快排+小坑+partition的两种思路

    在做一道剑指Offer的题的时候,有道题涉及到快排的思路,一开始就很快根据以前的思路写出了代码,但似乎有些细节不太对劲,自己拿数据试了下果然.然后折腾了下并记录下一些小坑,还有总结下划分方法parti ...

  2. 数据结构--排序--快排and冒泡(python)

    听说大厂面试,限时两分钟写出来快排... 闲着没事,写了一下... def Partition(L,low,high): pivotkey = L[low] while low<high: wh ...

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

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

  4. QuickSort(快排)的JAVA实现

    QuickSort的JAVA实现 这是一篇算法课程的复习笔记 用JAVA对快排又实现了一遍. 先实现的是那个easy版的,每次选的排序轴都是数组的最后一个: package com.algorithm ...

  5. Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等

    本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...

  6. Java实现的各种排序算法(包括冒泡,快排等)

    //堆排序 不稳定 import java.util.Arrays; public class HeapSort { public static void main(String[] args) { ...

  7. Java排序算法 [选择、冒泡、快排]

    选择排序: 简述:从数组的第一个元素开始,依次与其他所有的元素对比,如果比自身大或小(取决于升序或降序)交换位置. package com.sort; import java.util.Arrays; ...

  8. 排序 之 快排、归并、插入 - <时间复杂度>----掌握思想和过程

    俗话说:天下武功无坚不破,唯快不破.对于算法当然也是要使用时间最短.占用空间最小的算法来实现了. 注意:我代码里面打的备注仅供参考,建议不要背模板(因为没有固定的模板),可以写一个数列按着代码跑两圈或 ...

  9. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

随机推荐

  1. 《Tomcat内核设计剖析》勘误表

    <Tomcat内核设计剖析>勘误表 书中第95页图request部分印成了reqiest. 书中第311页两个tomcat3,其中一个应为tomcat4. 书中第5页URL应为URI. 书 ...

  2. OkHttp之ConnectInterceptor简单分析

    在< Okhttp之CacheInterceptor简单分析 >这篇博客中简单的分析了下缓存拦截器的工作原理,通过此博客我们知道在执行完CacheInterceptor之后会执行下一个浏览 ...

  3. 5天突击GRE(155+170+4.0)

    个人认为最靠谱GRE经验,没有之一 虽然分数并不高(V 155 + Q 170 + AW 4.0),但是自认为有很多很多可以拿来给短期突击同学的宝贵经验. 首先是自己的背景,交大英语教改实验班(交大同 ...

  4. memcached asp.net

    下载文件 memcached 1.解压缩文件到e:\memcached 2.命令行输入 e:\memcached\memcached.exe -d install' 3.命令行输入 e:\memcac ...

  5. 【剑指offer】数组中出现次数超过数组长度一半的数字,C++实现

    原创博文,转载请注明出处! # 题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过 ...

  6. 【剑指offer】二叉树中和为某一值的路径,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 1.题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径由结点和有向边组成,从根结点到叶节点. // 二叉树结点的定义 st ...

  7. matlab下kmeans及pam算法对球型数据分类练习

    clear all; clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %数据初始化 D ...

  8. ssm+PageHelper实现分页查询

    通过搭建ssm框架,然后通过mybatis的分页插件pagehelp进行分页查询.源码:https://gitee.com/smfx1314/pagehelper 看一下项目结构: 首先创建一个mav ...

  9. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  10. bzoj 4573 大森林

    bzoj 4573 大森林 由于树上路径是唯一的,查询合法的两个点间路径长度显然与其他加点操作无关,所以可以离线处理,将所有的查询放在加点后. 这样我们可以对每棵树都在上颗树的基础上处理好形态后,处理 ...