几种排序算法(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)的更多相关文章

  1. java实现几种简单的排序算法

    public class SimpleAri { public static void main(String[] args) { int[] t = {11, 21, 22, 1, 6, 10, 3 ...

  2. 四种简单的排序算法的php实现

    无聊,用php写几个排序算法,算法介绍请移步这里,这里使用php实现了几个简单的,如下 //选择排序 function selection_sort($arr){ $len = count($arr) ...

  3. 几种常见的排序算法Java实现总结

    public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...

  4. Python实现几种简单的排序算法

    一.冒泡排序 概念:为一个无序的列表排成有序的 实现过程描述:(升序) 1.比较相邻的元素,如果第一个比第二个大,就交换他们的位置 2.对每一对相邻元素重复1的工作,从开始第一队到最后一对,最后结束的 ...

  5. 八大排序算法Java实现

    本文对常见的排序算法进行了总结. 常见排序算法如下: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 它们都属于内部排序,也就是只考虑数据量较小仅需要使用内存的排 ...

  6. python3实现几种常见的排序算法

    python3实现几种常见的排序算法 冒泡排序 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...

  7. java讲讲几种常见的排序算法(二)

    java讲讲几种常见的排序算法(二) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 堆排序 思路:构建一个小顶堆,小顶堆就是棵二叉树,他的左右孩子均大于他的根节点( ...

  8. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  9. 8种排序算法 Java实现

    冒泡排序 O(n2) 两个数比较大小,较大的数下沉,较小的数冒起来. public static void bubbleSort(int[] a) { //临时变量 int temp; //i是循环次 ...

随机推荐

  1. 用pyinstaller把python代码打包成exe可执行文件

    优点: 1. pyinstaller 是跨平台的可以用在linux和windows系统上 2. 操作非常简单,几个命令就搞定了,这个比py2exe容易用多了 缺点: 1. 打包后的体积过大,因为要带p ...

  2. WPF 初学VisifireChart

    visifire今天登陆他们官网的时候,发现好像是挂掉了,不知道是不再运营了,还是单纯服务器出了问题. VisifireChart的效果不炫,但是对于一些项目,感觉够用的,所以,今天大概看了几篇博客, ...

  3. 28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测

    28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测 坊间有非常多的 C/C++ JSON 库,怎么选择是一个难题. [nativejson-benchmark](https://git ...

  4. 【HNOI2016】序列

    题面 题解 设\([l, r]\)的最小值的位置为\(p\),那么对于左端点在区间\([l, p]\),右端点在区间\([p, r]\)的区间最小值都为\(a[p]\). 这一部分的贡献就是\(a[p ...

  5. Yii2中的format

    关于format,这个也非常方便, 用来格式化内容的. 如下代码: <?= DetailView::widget([ 'model' => $model, 'attributes' =&g ...

  6. PowerBI开发 第二篇:数据建模

    在分析数据时,不可能总是对单个数据表进行分析,有时需要把多个数据表导入到PowerBI中,通过多个表中的数据及其关系来执行一些复杂的数据分析任务,因此,为准确计算分析的结果,需要在数据建模中,创建数据 ...

  7. wireshark找不到网卡

    在Capture Opinions中的interface若找不到网卡,一般是npf服务没有启动. npf是什么东东 Netgroup Packet Filter 网络数据包过滤器 NPF Device ...

  8. python 游戏(井字棋)

    1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ...

  9. PHP Laravel 连接并访问数据库

    第一次连接数据库 数据库配置位于config/database.php数据库用户名及密码等敏感信息位于.env文件创建一个测试表laravel_course <?php namespace Ap ...

  10. PHP学习 流程控制和数组

    flow control 流程控制decision structure 判断结构loop structure 循环结构 if(condition){statement1;} if(){}else{} ...