快速排序

基本思想:

  通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对两部分继续进行排序,直到整个序列有序。

实例:

1.一趟排序的过程:

2.排序的全过程:

把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比他小,则交换,比它大不做任何处理;

交换了以后再和小的那端比,比它小不交换,比它大交换。这样循环往复,一趟排序完成,左边的就是比中轴小的,

右边的就是比中轴大的,然后再用分治法,分别对这两个独立的数组进行排序。

代码实现

public class QucikSortDemo {
public static void main(String arg[]) { int[] numbers = {10, 89, 87, 76, 56, 46, 11, 75, 32, 35, 98};
System.out.println("排序前:");
printArr(numbers); quickSort(numbers);
System.out.println("排序后:");
printArr(numbers);
} /**
* 查找出中轴位置(默认是最低为low)的在number数组排序后所在位置
*
* @param numbers
* @param low
* @param high
* @return
*/
public static int getMiddle(int[] numbers, int low, int high) {
// 数组的第一位作为中轴
int temp = numbers[low];
while (low < high) {
while (low < high && numbers[high] > temp) {
high--;
}
// 比中轴晓得记录移动到低端
numbers[low] = numbers[high];
while (low < high && numbers[low] < temp) {
low++;
}
// 比中轴大的记录移到高端
numbers[high] = numbers[low]; }
// 中轴记录到尾
numbers[low] = temp;
// 返回中轴的位置
return low;
} /**
* 分治排序
*
* @param numbers
* @param low
* @param high
*/
public static void quickSort(int[] numbers, int low, int high) {
if (low < high) {
// 将numbers数组进行一分为二
int middle = getMiddle(numbers, low, high);
// 将低字段表进行递归排序
quickSort(numbers, low, middle - 1);
// 将高字段表进行递归排序
quickSort(numbers, middle + 1, high);
}
} public static void quickSort(int[] numbers) {
if (numbers.length > 0) {
quickSort(numbers, 0, numbers.length - 1);
}
} public static void printArr(int[] numbers) {
for (int i = 0; i < numbers.length; i++) {
System.out.print(numbers[i] + ",");
}
System.out.println("");
} }

Java基础巩固——排序的更多相关文章

  1. java基础 -- 经典排序

    ----  冒泡排序 方法: 1.每次比较相邻的两个数 2. 小的交换在前面 3.每轮结束后最大的数交换到最后 代码实现: /* * 冒泡排序 * */ public class SortNum { ...

  2. Java基础——选择排序、冒泡排序

    1.选择排序 原理是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 代码演示: public class Test3 { public sta ...

  3. Java基础--选择排序

    每一趟从待排序的数据元素中选出最小(或最大的)一个元素, 顺序放在已排好的序的数列的最后,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法. 选择排序的时间复杂度为 O(n^2). 第一次需 ...

  4. 【java基础】选择排序and冒泡排序

    前言 : 今天学习的是J2SE视频里的第五章,数组部分,它里面留了一个经典的作业,就是让我们去从1倒9按一定规格排序,这让我想起了学习vb的时候最最让我头疼的两种排序方法,选择排序法 和 冒泡排序法. ...

  5. Java基础复习笔记基本排序算法

    Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...

  6. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  7. Java基础教程:对象比较排序

    Java基础教程:对象比较排序 转载请标明出处:http://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序, ...

  8. java 基础排序(冒泡、插入、选择、快速)算法回顾

    java 基础排序(冒泡.插入.选择.快速)算法回顾 冒泡排序 private static void bubbleSort(int[] array) { int temp; for (int i = ...

  9. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

随机推荐

  1. python note 16 re模块的使用

    1.re模块(#regex) # 查找 # findall : 匹配所有 每一项都是列表中的一个元素 import re ret = re.findall('\d+','dawdawd154wadwa ...

  2. laravel的路由设置,路由参数和路由命名(三)

    laravel中必须先配置路由,才能使用.不像tp中不配置也能使用,因为tp可以通过pathinfo进行自动解析. 一.简单的路由设置 我们一般在routes/web.php文件中配置网页端路由. / ...

  3. Swoole 理解manager进程和worker进程的启动顺序,以及演示如何停止或者重启服务端。

    测试的代码主要功能:开启一个tcp服务器.然后设置了管理进程和工作进程start的回调进行更名.设置了pid_file保存了服务端启动的mast进程. <?php //创建Server对象,监听 ...

  4. python爬虫-百度百科百名红通人员名单

    爬虫代码: import urllib.request import os, re from bs4 import BeautifulSoup import xlwt URL = "http ...

  5. ----关于统计字符出现次数的JS循环以及indesxOf函数----

    以下将会通过JS循环判断字符“banana”出现次数 以及调用indexOf中的函数来实现统计   <!DOCTYPE html> <html> <body> &l ...

  6. NPOI颜色对照表

    颜色对照表:颜色 测试 Class名称 short        Test颜色 Black 8 Test颜色 Brown 60 Test颜色 Olive_Green 59 Test颜色 Dark_Gr ...

  7. Koa源码分析(一) -- generator

    Abstract 本系列是关于Koa框架的文章,目前关注版本是Koa v1.主要分为以下几个方面: 1. Koa源码分析(一) -- generator 2. Koa源码分析(二) -- co的实现 ...

  8. tomcat连接常用数据库的用法

    一.用于数据库连接的术语: JDBC:(Java database connectivity)是基于java数据访问技术的一个API通过客户端访问服务器的数据库,是一个面向关系型数据库并提供一种方法查 ...

  9. 使用electron开发指静脉客户端遇到的问题总结

    使用electron 使用nodejs 的ffi模块调用dll文件 总结1.electron 与nodejs版本不需要一致,甚至nodejs版本应该高于electron的node版本2.要安装 Vis ...

  10. CoUninitialize引发的一个错误

    程序开始已使用CoUninitialize,后边的函数又再次调用CoUninitialize,判断返回值,导致函数提前退出返回异常.