关于快速排序的Java代码实现
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
实现方式一:
package test1; public class QuicSort {
/*
* 使用快速排序
* arras:要排序的数组
* low:数组的开始下标
* hight:数组的末尾下标
*/
public void sort(int[] arras,int low,int hight){
int i = low;
int j = hight;
if(i>j){
return ;
}
//基准元素
int key = arras[low];
while(true){//让一趟里面的全部元素都比较完毕
//j往前走
while(j>i){
if(arras[j] < key){
//交换
int temp = arras[j];
arras[j] = arras[i];
arras[i] = temp;
break;
}else{
j--;
}
}
//i往后走
while(j>i){
if(arras[i] > key){
//交换
int temp = arras[j];
arras[j] = arras[i];
arras[i] = temp;
break;
}else{
i++;
}
}
if(i ==j){
break;
}
}
//基准左边的数组排序
sort(arras,low,i-1);
//基准右边的数组排序
sort(arras,i+1,hight);
}
/*
* 打印数组里面的元素
*/
public void print(int[] arras){
for(int i=0 ; i<arras.length;i++){
if(i==arras.length-1){
System.out.println(arras[i]);
}else{
System.out.print(arras[i]+",");
}
}
}
public static void main(String[] args) {
int[] as = {49,38,65,97,76,13,27};
QuicSort qs = new QuicSort();
qs.sort(as,0,as.length-1);
qs.print(as);
}
}
实现方式二:
package test1; public class QuickSort1 {
int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99,
98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51 };
public QuickSort1() {
quick(a);
for (int i = 0; i < a.length; i++)
System.out.println(a[i]);
}
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; // 数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {
high--;
}
list[low] = list[high]; // 比中轴小的记录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; // 比中轴大的记录移到高端
}
list[low] = tmp; // 中轴记录到尾
return low; // 返回中轴的位置
}
public void _quickSort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); // 将list数组进行一分为二
_quickSort(list, low, middle - 1); // 对低字表进行递归排序
_quickSort(list, middle + 1, high); // 对高字表进行递归排序
}
}
public void quick(int[] a2) {
if (a2.length > 0) { // 查看数组是否为空
_quickSort(a2, 0, a2.length - 1);
}
}
}
关于快速排序的Java代码实现的更多相关文章
- 常见的排序算法之Java代码解释
一 简要介绍 一般排序均值的是将一个已经无序的序列数据重新排列成有序的 常见的排序分为: 1 插入类排序 主要就是对于一个已经有序的序列中,插入一个新的记录.它包括:直接插入排序,折半插入排序和希尔排 ...
- java 代码
java 里的 pandas tablesaw DataFrame 再有就是 spark 了 java 代码规范 Java8特性详解 lambda表达式 Stream Sonar 规则检测 sprin ...
- 专题 查找与排序的Java代码实现(一)
专题 查找与排序的Java代码实现(一) 查找(Searching) 线性查找(linear search) 属于无序查找算法,适合于存储结构为顺序存储或链接存储的线性表. 基本思想:从数据结构线形表 ...
- 快速排序的Java和python实现,亲测实际可用
1.基本思想 快速排序每趟排序确定一个元素x的位置,使用的方式是 将大于元素x的值放大x的右边,小于元素x的值放大x的左边.当确定x的位置之后,再分别对x左边的数组和右边的数组进行快速排序即可. 2. ...
- 快速排序之Java实现
快速排序之Java实现 代码: package cn.com.zfc.lesson21.sort; /** * * @title QuickSort * @describe 快速排序 * @autho ...
- 快排的java实现方式,用java代码来实现快排
1. 快排的思想 通过一趟排序将要排序的数据分割成独立的两部分,前一部分的所有数据都要小于后一部分的所有数据,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据的 ...
- 十大经典排序算法最强总结(含JAVA代码实现)(转)
十大经典排序算法最强总结(含JAVA代码实现) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在“桶排序”算法中对每 ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 怎样编写高质量的java代码
代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友 ...
随机推荐
- win7远程链接ubuntu 桌面版
1.安装ubuntu 使用vagrant 添加了一个ubuntu12.04(xmanager好像只能控制最高这个版本,14.04没成功过) 2.安装xmanager 4 3.修改ubutu配置文件 s ...
- adaboost学习资料收集
很通俗易懂的一篇博文 http://blog.csdn.net/haidao2009/article/details/7514787 百度搜索研发部的一篇文章 http://stblog.baidu- ...
- mexopencv问题:Invalid MEX file GLIBCXX_3.4.15 error
参考:http://blog.sina.com.cn/s/blog_74112f030101cmxt.html root@debian-yuliyang:/opt/matlab/sys/os/glnx ...
- python 调试
python 调试基本和gdb调试一样,举例: debug .py #!/usr/bin/python print "hello" i=0 for j in range(10) ...
- Leetcode OJ : Merge k Sorted Lists 归并排序+最小堆 mergesort heap C++ solution
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- berserkJS(大名:狂暴JS / 昵称:疯子JS)
极分享:高质分享+专业互助=没有难做的软件+没有不得已的加班 http://www.finalshares.com/read-6763?f=g-20
- Java HashMap 核心源码解读
本篇对HashMap实现的源码进行简单的分析. 所使用的HashMap源码的版本信息如下: /* * @(#)HashMap.java 1.73 07/03/13 * * Copyright 2006 ...
- [iOS基础控件 - 3.3] 图片浏览器
需求: 1.显示当前图片序号/总图片数 2.显示图片 3.上一张图片.下一张图片转换 4.显示图片描述 A.数据的加载方式 1.逐个加载.处理 2.使用数组.字典分离数据和逻辑 3.延迟加载 ...
- ecshop中index.dwt文件分析
对于ecshop新手来说,这篇总结值得关注. 对于没有web编程基础的同学来说,ecshop模板里面有两个文件特别重要, 但是这两个文件同时也很不好理解,分别是index.dwt和style.css. ...
- UVA 705 Slash Maze
Slash Maze By filling a rectangle with slashes (/) and backslashes ( ), you can generate nice litt ...