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. poj 1654 Area(求多边形面积 && 处理误差)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16894   Accepted: 4698 Description ...

  2. 【springmvc学习】常用注解总结

    @Controller 在springmvc中,我们用它来告诉前端控制器,他这个类是controller,也就是springmvc的一个对象了,我们在spring.xml配置文件中用<conte ...

  3. String--在内存中的表现

    创建字符串的方法有两种:   Stringstr1=”直接赋值法”          Stringstr2=new String(“通过new关键字的方法来创建”); 在执行String str1=” ...

  4. 外观模式(Facade)(门面模式、子系统容易使用)

    外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低 ...

  5. Linux 下安装和使用 Redis

    系统: CentOS-7-1611 首先安装gcc 因为要make编译 参照官网 wget  下载包 解压  make 编译完成后会在src目录下生成几个可执行文件 然后执行:make install ...

  6. web前端学习(三)css学习笔记部分(2)-- css定位+盒子操作

    3.CSS定位 3.1定位 1.CSS定位: 改变元素在页面上的位置 2.CSS定位机制 普通流:元素按照其在HTML中的位置顺序决定排布的过程 浮动 绝对布局 属性 描述 position 把元素放 ...

  7. LintCode_46 主元素

    题目 给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一. 样例 给出数组[1,1,1,1,2,2,2],返回 1 思路 首先 发现所给的数组是顺序排列好的. 用动态规划 ...

  8. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

  9. python内置模块大全 processon

    https://www.processon.com/view/link/5b4ee15be4b0edb750de96ac#map

  10. 实现一个vue的图片预览插件

    vue-image-swipe 基于photoswipe实现的vue图片预览组件 安装 1 第一步 npm install vue-image-swipe -D 2 第二步 vue 入口文件引入 im ...