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. DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)

    css中cursor属性详解-鼠标移到图片变换鼠标形状   语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...

  2. Mininet python代码创建拓扑、交互式界面创建主机、交换机

          python代码创建拓扑: from mininet.net importMininet net =Mininet() # Creating nodes in the network. c ...

  3. 2017《Java技术》预备作业01

    2017<Java技术>预备作业 1.学习使用MarkDown 本学期的随笔都将使用MarkDown格式,要求熟练掌握MarkDown语法,学会如何使用标题,插入超链接,列表,插入图片,插 ...

  4. 【集成学习】sklearn中xgboost模块中plot_importance函数(绘图--特征重要性)

    直接上代码,简单 # -*- coding: utf-8 -*- """ ################################################ ...

  5. [转]redis服务器与客户端保活参数(tcp-keepalive)设置

    最近使用redis的list做跨进程的消息队列,客户端使用的是redis-cplusplus-client.这个client库还是蛮好用的,提供了和redis命令行一致的接口,很方便. 使用过程中发现 ...

  6. nginx在使用proxy_pass的情况下开启error_page

    error_page用于指定特定错误发生时要显示的url,但是如果请求经proxy_pass处理后,如何使error_page对upstream产生的错误进行处理呢? 方法很简单. 保持之前的erro ...

  7. debian 8.1 安装idempiere 2.1 X64 笔记

    接上文.当虚拟服务器和虚拟机搭建完成后.登陆debian 8.1 X64. 进入虚拟服务器控制台.打开虚拟机.root登陆.(留好初始状态系统快照.以便系统恢复.) 由于之前debian8.1X64默 ...

  8. 使用LinkedBlockingQueue来实现生产者消费者的例子

    工作中,经常有将文件中的数据导入数据库的表中,或者将数据库表中的记录保存到文件中.为了提高程序的处理速度,可以设置读线程和写线程,这些线程通过消息队列进行数据交互.本例就是使用了LinkedBlock ...

  9. BZOJ5281: [Usaco2018 Open]Talent Show(01分数规划&DP)

    5281: [Usaco2018 Open]Talent Show Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 166  Solved: 124[S ...

  10. log4j 格式详解

    ### 设置### log4j.rootLogger = debug,stdout,D,E ### 输出信息到控制抬 ### log4j.appender.stdout = org.apache.lo ...