Java版各种排序算法 (冒泡,快速,选择,插入)
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版各种排序算法 (冒泡,快速,选择,插入)的更多相关文章
- Java四种排序:冒泡,选择,插入,二分(折半插入)
四种排序:冒泡,选择,插入,二分(折半插入) public class Test{ // public static void main(String[] args) { // Test t=new ...
- php 冒泡 快速 选择 插入算法 四种基本算法
php四种基础算法:冒泡,选择,插入和快速排序法 来源:PHP100中文网 | 时间:2013-10-29 15:24:57 | 阅读数:120854 [导读] 许多人都说 算法是程序的核心,一个程序 ...
- 数据结构Java版之排序算法(二)
排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小 ...
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
- Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
Java 二维数组,排序.切换顺序,查表法二进制十进制,折半查找.排序(冒泡.选择).遍历,获取最大小值(4)
- Java中的排序算法(2)
Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...
- Java数组的排序算法
在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...
- java实现各种排序算法
java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...
随机推荐
- Java问题解读系列之IO相关---Java深拷贝和浅拷贝
前几天和棒棒童鞋讨论Java(TA学的是C++)的时候,他提到一个浅拷贝和深拷贝的问题,当时的我一脸懵圈,感觉自己学Java居然不知道这个知识点,于是今天研究了一番Java中的浅拷贝和深拷贝,下面来做 ...
- proteus 8.8 直装版提示Symbol $MKRORIGIN used but not found in libraries 安装后没有库
用管理员运行程序,然后再通过菜单打开仿真文件是没问题. 解决方法:通常的安装目录是C:\Program Files (x86)\Labcenter Electronics\Proteus 8 Prof ...
- windows 环境下搭建docker私有仓库
windows 环境下搭建docker私有仓库 1.在公用仓库中pull仓库镜像 docker pull regitry 2.启动仓库镜像 //-d意思是后台运行,-p是做端口映射,这里是将本地的50 ...
- oracle习题练习-表空间-用户-表-约束
题一 1. 创建名字为hy_tablespace的表空间,默认大小为10M;@@ 2. 创建一个用户,用户名以自己名字命名,并指定命名空间为hy_tablespace;@@@@ ...
- day38 11-Spring的Bean的属性的注入:对象属性
package cn.itcast.spring3.demo5; public class Person { private String name;//人的名字 private Car2 car2; ...
- 集训队日常训练20180518-DIV1
A.3583 n根木棍是否能分成相等两堆. 背包dp,首先求和sum,如果为偶数就说明不行,否则考虑做一个sum/2大小的背包. #include<bits/stdc++.h> using ...
- oracle-DML-2
1.update 语句 update table set [column,column......] where column ='' 示例: update customers set ...
- (转载)http压缩 Content-Encoding: gzip
(内容转自http://liuviphui.blog.163.com/blog/static/20227308420141843933379/) HTTP内容编码和HTTP压缩的区别 HTTP压缩,在 ...
- Apache httpd问题汇总
1.Apache服务器下载到本地解压到路径下:C:\ProgramFiles\Apache 后,启动时报错:serverroot must be a valid directory 解决办法:1.打开 ...
- html5之本地数据库
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...