几种简单的排序算法(JAVA)
几种排序算法(JAVA)
一、代码
package com.hdwang; import java.util.Arrays; /**
* Created by admin on 2017/1/20.
*/
public class Sort { /**
* 冒泡排序(最小数冒泡)
* @param array 数组
*/
public void bubbleSort(int[] array){
for(int i=0;i< array.length-1;i++){ //比多少次
for(int j= i+1;j<array.length;j++){ //每次循环,将最小数提前
if(array[i]>array[j]){ //小数冒泡
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
} /**
* 选择排序(选择最小值置前,较冒泡排序空间占用多,速度快(少了交换))
* @param array 数组
*/
public void selectSort(int[] array){
for(int i=0;i<array.length-1;i++){
int minIndex = i;
for(int j=i+1;j<array.length;j++){
if(array[j]<array[minIndex]){
minIndex = j; //最小值位置
}
}
//交换最小值与第i位的值
if(minIndex != i){
int tmp = array[minIndex]; //最小值
array[minIndex] = array[i];
array[i] = tmp;
}
}
} /**
* 插入排序(大数后移,小数插入前面,理论上比选择排序空间大,速度快)
* @param array 数组
*/
public void insertSort(int[] array){
for(int i=1;i< array.length;i++){
int tmp = array[i]; //暂存i位的元素,空出来
int j = i;
for(;j > 0 && tmp < array[j-1]; j--){ //前面的大数移到后面来
array[j] = array[j-1];
}
array[j] = tmp; //tmp插入准确位置
}
} /**
* 快速排序(理论上比插入排序空间占用大,排序速度更快)
* @param array 数组
* @param lowIndex 低位索引
* @param highIndex 高位索引
*/
public void quickSort(int[] array,int lowIndex,int highIndex){
if(lowIndex >= highIndex){
return; //退出递归
}
int base = array[lowIndex]; //基准数(小的放其左边,大的放其右边)
int low = lowIndex; //副本
int high = highIndex; //副本
while(low<high){
while(low<high){ //从后面往前找到一个比base小的数,放到前面去(low的位置上去)
if(array[high] < base){
array[low] = array[high];
low++;
break;
}
high--;
}
while(low<high){ // 从前面往后找到一个大于或等于base的数,放到后面去(high的位置上去)
if(array[low] >= base){
array[high] = array[low];
high--;
break;
}
low++;
}
}
array[low] = base; //low==high 结束 quickSort(array,lowIndex,low-1); //递归排序前一段
quickSort(array,low+1,highIndex); //递归排序后一段
} public static void main(String[] args) {
int[] array = {2,3,1,6,9,5,4,2};
System.out.println(Arrays.toString(array)); Sort sort = new Sort();
// sort.bubbleSort(array);
// sort.selectSort(array);
// sort.insertSort(array);
sort.quickSort(array,0,array.length-1);
System.out.println(Arrays.toString(array)); }
}
二、输出结果
[2, 3, 1, 6, 9, 5, 4, 2]
[1, 2, 2, 3, 4, 5, 6, 9]
几种简单的排序算法(JAVA)的更多相关文章
- java实现几种简单的排序算法
public class SimpleAri { public static void main(String[] args) { int[] t = {11, 21, 22, 1, 6, 10, 3 ...
- 四种简单的排序算法的php实现
无聊,用php写几个排序算法,算法介绍请移步这里,这里使用php实现了几个简单的,如下 //选择排序 function selection_sort($arr){ $len = count($arr) ...
- 几种常见的排序算法Java实现总结
public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...
- Python实现几种简单的排序算法
一.冒泡排序 概念:为一个无序的列表排成有序的 实现过程描述:(升序) 1.比较相邻的元素,如果第一个比第二个大,就交换他们的位置 2.对每一对相邻元素重复1的工作,从开始第一队到最后一对,最后结束的 ...
- 八大排序算法Java实现
本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...
- python3实现几种常见的排序算法
python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- java讲讲几种常见的排序算法(二)
java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...
- java讲讲几种常见的排序算法
java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...
- 8种排序算法 Java实现
冒泡排序 O(n2) 两个数比较大小,较大的数下沉,较小的数冒起来. public static void bubbleSort(int[] a) { //临时变量 int temp; //i是循环次 ...
随机推荐
- Kafka下的生产消费者模式与订阅发布模式
原文:https://blog.csdn.net/zwgdft/article/details/54633105 在RabbitMQ下的生产消费者模式与订阅发布模式一文中,笔者以“数据接入”和“事 ...
- Centos 定时任务发送smtp邮件
接着上一篇文章...... 1.首先创建一个sheel的脚本命令,我是在home文件夹下面创建的命令: touch a.sh 2.编辑a.sh脚本 vim a.sh ,键入键盘 i 键 准备插入 ...
- 几个不常用的 Web API
1. 设备震动 vibrate Navigator.vibrate() 方法使设备(有震动硬件)产生有频率的震动.若设备不支持震动,该方法将无效.若某震动方式已经在进行中(当该方法调用时),则前一个震 ...
- 未能使用“Csc”任务的输入参数初始化该任务
今天.NetCore2.1版本,建立Asp.net Core web应用程序项目时,报以下错误: 未能使用“Csc”任务的输入参数初始化该任务. “Csc”任务不支持“SharedCompilatio ...
- Egret(白鹭引擎)——“TypeError: Cannot read property 'asCom' of null”
前言 相信我,这个错误新手都不陌生:TypeError: Cannot read property 'asCom' of null 还有,一定要看我上一篇,哦不(人家应该是报了这个错,才找到看到这篇文 ...
- winform 记事本 剪切 粘贴 全选 撤销
private void 撤消UToolStripMenuItem_Click(object sender, EventArgs e) { textBox1.Undo(); } private voi ...
- Kosaraju算法、Tarjan算法分析及证明--强连通分量的线性算法
一.背景介绍 强连通分量是有向图中的一个子图,在该子图中,所有的节点都可以沿着某条路径访问其他节点.强连通性是一种非常重要的等价抽象,因为它满足 自反性:顶点V和它本身是强连通的 对称性:如果顶点V和 ...
- 微信小程序在当前页面设置其他页面的数据
如果其他页面用到的数据是 globalData, 那么直接在当前页面修改 globalData 数据即可. 如果其他页面用到的数据是 storage, 那么直接在当前页面修改 storage 数据即可 ...
- 【亲测有效】Nodepad++/Sublime Text3中Python脚本运行出现语法错误:IndentationError: unindent does not match any outer indentation level解决策略
我在开发游戏的时候,发现一个python脚本,本来都运行好好的,然后写了几行代码,而且也都确保每行都对齐了,但是运行的时候,却出现语法错误: IndentationError: unindent do ...
- 记录一次Docker For Windows10镜像加速器配置
1.访问https://www.daocloud.io 注册账号 2.访问资源->加速器,或者直接访问网址https://www.daocloud.io/mirror,页面中间有加速配置,例如我 ...