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. 20190725-Silly

    $ \mathsf{You\ think\ about\ what\ you\ want\ because\ you're\ just\ alive}$ ——C418-Alive 我不能yuanlia ...

  2. WPF:数据绑定--PropertyChangeNotification属性更改通知

      PropertyChangeNotification属性更改通知 实现效果:1.拍卖金额自动随属性值变化而通知界面绑定的值变化. 关键词 : INotifyPropertyChanged Obse ...

  3. Neo4j与ElasticSearch数据同步

    Neo4j与ElasticSearch数据同步 针对节点删除,加了一些逻辑,代码地址 背景 需要强大的检索功能,所有需要被查询的数据都在neo4j. 方案 在Server逻辑中直接编写.后端有一个St ...

  4. 玩转Spring Boot 自定义配置、导入XML配置与外部化配置

    玩转Spring Boot 自定义配置.导入XML配置与外部化配置       在这里我会全面介绍在Spring Boot里面如何自定义配置,更改Spring Boot默认的配置,以及介绍各配置的优先 ...

  5. python 索引上的合并

  6. CURL POST PHP

    function SendPostCurl($url,$post_data){ $curl = curl_init(); //初始化 curl_setopt($curl, CURLOPT_URL, $ ...

  7. 微信小程序之组件的集合(一)

    小程序中是很强调组件中开发的,我们看到的页面是由许多组件组成的,但是这些组件是如何组合在一起的呢?来学习一下!  一.组件中数据的获取 接着上一篇文章,继续来优化代码,如何把从服务器上获取的数据显示到 ...

  8. webstorm/phpstorm破解版教程网址

    http://idea.lanyus.com/ http://www.php.cn/tool/phpstorm/408348.html 如果正版到期了,重新安装不能再次免费试用的话,之后我就用老版的w ...

  9. 找不到windows.h源文件

    一.找不到源文件window.h 今天在网上下了个程序,在公司用VS2015能打开,在家用VS2017却打不开,提示找不到源文件window.h,因为引用了这个头文件,但是却找不到 解决方案: 右侧解 ...

  10. 什么? 1XIN = 21BTC

    什么? 1XIN = 21BTC 最初看到这个标题,我还回去考证一下. 原来是 Mixin Network 的宣传广告. BTC 是多少? 2100万枚. XIN 是 100 万枚. 所以才有了 1X ...