package com.test4;
import java.util.*; //Calendar 显示时间
/**
* @author qingfeng
* 功能:排序算法
*/
public class Bubble { public static void main(String[] args) {
// TODO Auto-generated method stub
//int arr[] = {10,1,-20,89,-1,78,-45}; //随机产生大量数据 int len = 5000000;//500万个数 1秒
int[] arr = new int[len]; for(int i=0; i<len; i++)
{
//产生1到1000的数
arr[i] = (int)(Math.random()*10000);
}
/*
for(int i=0; i<len; i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
*/ //显示排序前的时间
Calendar time = Calendar.getInstance();//获取时间实例
System.out.println("排序前的时间为:"+time.getTime()); /*InsertSort is = new InsertSort();//50000个数3秒
is.sort(arr);*/
/*
BubbleSort bs = new BubbleSort();//50000个数9秒
bs.sort(arr);*/ /*
SelectSort ss = new SelectSort(); //50000个数排序3秒
ss.sort(arr);*/
QuickSort qs = new QuickSort();
qs.sort(0, arr.length-1, arr); /*
int a = 1;
bs.test(a);
System.out.println("a的值为:"+a);//a的值为1 并不是2 因为是值传递
*/ /*
System.out.println("-----------------------------");
for(int i=0; i<arr.length; i++)
{
System.out.print(arr[i]+" ");
}
System.out.println();
*/
//显示排序前的时间
Calendar time2 = Calendar.getInstance();//获取时间实例
System.out.println("排序后的时间为:"+time2.getTime());
}
}
//冒泡排序
class BubbleSort
{
public void test(int a)//测试值传递
{
a++;
}
public void sort(int arr[]) //引用传递(复合类型)
{
int temp; //冒泡排序
//外层循环:n个数 n-1趟排序
for(int i=0; i<arr.length-1; i++)
{
//内层循环:若前比后打则交换 (每趟比前一趟少排一个数:所以"-i")
for(int j=0; j<arr.length-1-i; j++)
{
if(arr[j]>arr[j+1])
{
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
}
}
//选择排序
class SelectSort
{
public void sort(int arr[])//引用传递
{
//外层循环:n个数 n-1趟排序 最后一个数不要再次排序
for(int i=0; i<arr.length-1; i++)
{
int min=arr[i];
int minIndex = i; int j;
int temp;
//内层循环:选择min值
for(j=i+1; j<arr.length; j++)
{
if(min > arr[j])
{
min = arr[j];
minIndex = j;
}
}
//最小值和每趟第一个值交换
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
} }
//插入排序
class InsertSort
{
public void sort(int[] arr)
{
//控制趟数 从第2个数开始 无序表每次插入一个数到有序表
for(int i=1; i<arr.length; i++)
{
int insertVal = arr[i]; //记录待插入数字
int index = i-1;//初始插入位置:为无序表的前一个位置! //搜索插入位置
while(index>=0 && insertVal < arr[index])
{
//从待插入元素的前一个位置开始扫描 如果大于待插入元素arr[index]后移!
arr[index+1] = arr[index];
index--; //往前搜索
}
//将insertVal插入到适当位置
arr[index+1] = insertVal;
}
}
}
//快速排序
class QuickSort
{
public void sort(int left, int right, int[] arr)
{
int i = left; //左运动指针初值
int j = right;//右运动指针初值 if(i < j) //递归结束条件
{
int key = arr[i];//每趟分割点为左边第一个数并用key做记录;必须判断i<j,否则再次调用下标i+1即a[i+1]可能越界
while(i<j)
{
while( i<j && arr[j]>=key)//左右指针不碰面且右边的数若>=分割值
{
j--;//右边从后往前搜索
}
if(i<j)//若找到右边的数小于分割值
{
arr[i] = arr[j];//交换
i++;//左指针右移一位
} while(i<j && arr[i]<=key)//左右指针不碰面且左边的数若>=分割值
{
i++;//左边到右边搜索
}
if(i<j)//若左边找到比分割值大的数
{
arr[j] = arr[i];//左右指针不碰面且右边的数若>=分割值
j--;//右指针左移一位
}
}
arr[i] = key;//分割值放入最终位置
sort(left, i-1, arr);
sort(i+1, right, arr);
}
}
}

Java版各种排序算法 (冒泡,快速,选择,插入)的更多相关文章

  1. Java四种排序:冒泡,选择,插入,二分(折半插入)

    四种排序:冒泡,选择,插入,二分(折半插入) public class Test{ // public static void main(String[] args) { // Test t=new ...

  2. php 冒泡 快速 选择 插入算法 四种基本算法

    php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...

  3. 数据结构Java版之排序算法(二)

    排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小 ...

  4. Java常见排序算法之直接选择排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  5. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  6. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)

    Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)

  7. Java中的排序算法(2)

    Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...

  8. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  9. java实现各种排序算法

    java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...

随机推荐

  1. 20190719-FirstZero

    这也许也是一个成就吧? First Zero 考试 第一次 爆0 好了好了. T1 你永远不知道你在想什么. 我仿佛想出一个$\Theta(NM\log^2 N)$的$dfs$??? 蒟蒻原地爆炸 T ...

  2. WPF学习笔记-用Expression Blend制作自定义按钮

    1.从Blend工具箱中添加一个Button,按住shift,将尺寸调整为125*125; 2.右键点击此按钮,选择Edit control parts(template)>Edit a cop ...

  3. ORACLE的Copy命令和create table,insert into的比较

    在数据表间复制数据是Oracle DBA经常面对的任务之一,Oracle为这一任务提供了多种解决方案,SQL*Plus Copy 命令便是其中之一.SQL*Plus Copy 命令通过SQL*Net在 ...

  4. mysql 常用命令语法

    登录到mysql client 以windows下为例,打开cmd命令窗口,进入到mysql安装目录bin目录下,首先要启动mysql服务,执行命令: net start mysql,这里不需要分号. ...

  5. Python之路,Day2 - Python基础(转载Alex)

    Day2-转自金角大王 本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存 ...

  6. MySQL数据库起步 linux安装(更新中...)

    卸载mysql! [root@localhost usr]# yum remove mysql mysql-server mysql-libs compat-mysql51 [root@localho ...

  7. python应用文件读取写登录注册

    #!/usr/bin/python3# -*- coding: utf-8 -*-# Author: zhw#读取文件中的内容def open_file(filename ,file_type , * ...

  8. plsql中学习job

    --1.plsql中学习job --学习job --建表 create table test_job(para_date date); commit; insert into test_job val ...

  9. iOS -NSOperation并发编程

    http://www.cocoachina.com/game/20151201/14517.html http://blog.csdn.net/qinlicang/article/details/42 ...

  10. vuecli3取消eslint

    1.之前好好的项目,今天运行npm run serve.忽然报错运行不了了. 2.原因 在生成项目时候没有忽略 ESlint选项配置,其实建议创建项目的时候还是忽略掉这个选项比较好,因为后期写项目多空 ...