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. WWDC 上讲到的 Objective C / LLVM 改进

    https://developer.apple.com/wwdc/videos/ Advances in Objective-C What's New in the LLVM Compiler 下面是 ...

  2. jeecms使用小结

    前言: 使用jeecmsV9已经有一段时间,现在PC端的二次开发基本进入尾声,手机端的开发即将开始 ,由于项目时间比较紧,开发时不是每个人都会使用它自带的标签,所以在PC端开发的时候浪费了大量时间,为 ...

  3. JS倒计时-毫秒

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  4. 使用Python进行文件操作

    作为高级语言,对文件进行操作时必不可少的功能.那么,Python是怎么对文件进行操作的呢? 1.什么是文件? 文件是一个存储在辅助存储器上的数据序列,可以包含任何数据内容. 文件包括两种类型:文本文件 ...

  5. python实例 函数

    #! /usr/bin/python # -*- coding: utf8 -*- def sum(a,b):     return a+b func = sum r = func(5,6) prin ...

  6. ZOJ3195 Design the city [2017年6月计划 树上问题04]

    Design the city Time Limit: 1 Second      Memory Limit: 32768 KB Cerror is the mayor of city HangZho ...

  7. jquery源码学习(二)——jquery中的变量

    jquery在 21-93 行提供了变量 var // A central reference to the root jQuery(document) rootjQuery, // The defe ...

  8. laravel-admin 安装(总结)

    https://www.jianshu.com/p/844b05e4c45a laravel-admin 是一个可以快速帮你构建后台管理的工具,它提供的页面组件和表单元素等功能,能帮助你使用很少的代码 ...

  9. 跟我一起学extjs5(02--建立project项目)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jfok/article/details/35569057 跟我一起学extjs5(02--建立pro ...

  10. PHP生成短连接的方法

    PHP生成短连接的方法.md PHP生成短连接的方法 直接贴上方法,函数可以查看手册. <?php /** 生成短网址 * @param String $url 原网址 * @return St ...