【转】几种基本的排序算法演示
2009-09-15 13:20
405 查看
package sort;
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Random;
public class Sort {
static int NUM=100000;
static long start;//开始时间
static long end;//结束时间
public static void main(String[] args) {
//生成3个相同的数组,同一情况下比较
Random random=new Random();
int[]a1=new int[NUM];
int[]a2=new int[NUM];
int[]a3=new int[NUM];
int[]a4=new int[NUM];
for(int i=0;i<NUM;i++){
a1[i]=random.nextInt(NUM);
a2[i]=a3[3]=a4[i]=a1[i];
}
// int[]a2=Arrays.copyOf(a1, NUM);
// int[]a3=Arrays.copyOf(a1, NUM);
// int[]a4=Arrays.copyOf(a1, NUM);
//排序算法比较,开始了...
start=System.currentTimeMillis();
System.out.println("冒泡排序开始时间:"+new Timestamp(start));
mpSort(a1);
end=System.currentTimeMillis();
System.out.println("冒泡排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组冒泡排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a1.length;i++){
// System.out.print(a1[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("选择排序开始时间:"+new Timestamp(start));
xzSort(a2);
end=System.currentTimeMillis();
System.out.println("选择排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组选择排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a2.length;i++){
// System.out.print(a2[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("插入排序开始时间:"+new Timestamp(start));
crSort(a3);
end=System.currentTimeMillis();
System.out.println("插入排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组插入排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a3.length;i++){
// System.out.print(a3[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("快速排序开始时间:"+new Timestamp(start));
quickSort(a4);
end=System.currentTimeMillis();
System.out.println("快速排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组快速排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a4.length;i++){
// System.out.print(a4[i]+",");
// }
// System.out.print("/n/n"+"---------------"+"/n");
}
//冒泡排序mpSort(int[])
//比较:(n-1)+(n-2)+...+1次,最多交换(n-1)+(n-2)+...+1次
//第1~n个,第1~n-1个,第1~n-2个...
public static void mpSort(int[] data) {
for (int i=0; i<data.length-1; i++) {
for(int j=0;j<data.length-1-i;j++){
if(data[j]>data[j+1]){
int temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}
//选择排序xzSort(int[])
//比较(n-1)+(n-2)+...+1次,最多交换(n-1)次
//第1~n个,第2~n个,第3~n个...
public static void xzSort(int[] data) {
for (int i=0; i<data.length-1; i++) {
int k=i;
for(int j=i+1;j<data.length;j++){
if(data[k]>data[j]){
k=j;
}
}
int temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
//插入排序
//比较第i趟后,使得前i个有序
public static void crSort(int[] data) {
for (int i=0; i<data.length; i++) {
for (int j=0; j<i; j++) {
if (data[i]<data[j]) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
//快速排序qsSort(int[])//采用2分算法
public static void quickSort(int[] array) {
quickSort(array, 0, array.length - 1);
}
private static void quickSort(int[] array, int low, int high) {
if (low < high) {
int p = partition(array, low, high);
quickSort(array, low, p - 1);
quickSort(array, p + 1, high);
}
}
private static int partition(int[] array, int low, int high) {
int s = array[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (array[j] < s) {
i++;
swap(array, i, j);
}
}
swap(array, ++i, high);
return i;
}
private static void swap(int[] array, int i, int j) {
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//结果
冒泡排序开始时间:2009-09-15 13:05:29.057
冒泡排序结束时间:2009-09-15 13:06:22.031
长度为100000的数组冒泡排序耗时52974ms!
---------------
选择排序开始时间:2009-09-15 13:06:22.031
选择排序结束时间:2009-09-15 13:06:53.927
长度为100000的数组选择排序耗时31896ms!
---------------
插入排序开始时间:2009-09-15 13:06:53.927
插入排序结束时间:2009-09-15 13:07:21.827
长度为100000的数组插入排序耗时27900ms!
---------------
快速排序开始时间:2009-09-15 13:07:21.827
快速排序结束时间:2009-09-15 13:07:21.874
长度为100000的数组快速排序耗时47ms!
import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Random;
public class Sort {
static int NUM=100000;
static long start;//开始时间
static long end;//结束时间
public static void main(String[] args) {
//生成3个相同的数组,同一情况下比较
Random random=new Random();
int[]a1=new int[NUM];
int[]a2=new int[NUM];
int[]a3=new int[NUM];
int[]a4=new int[NUM];
for(int i=0;i<NUM;i++){
a1[i]=random.nextInt(NUM);
a2[i]=a3[3]=a4[i]=a1[i];
}
// int[]a2=Arrays.copyOf(a1, NUM);
// int[]a3=Arrays.copyOf(a1, NUM);
// int[]a4=Arrays.copyOf(a1, NUM);
//排序算法比较,开始了...
start=System.currentTimeMillis();
System.out.println("冒泡排序开始时间:"+new Timestamp(start));
mpSort(a1);
end=System.currentTimeMillis();
System.out.println("冒泡排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组冒泡排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a1.length;i++){
// System.out.print(a1[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("选择排序开始时间:"+new Timestamp(start));
xzSort(a2);
end=System.currentTimeMillis();
System.out.println("选择排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组选择排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a2.length;i++){
// System.out.print(a2[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("插入排序开始时间:"+new Timestamp(start));
crSort(a3);
end=System.currentTimeMillis();
System.out.println("插入排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组插入排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a3.length;i++){
// System.out.print(a3[i]+",");
// }
System.out.print("/n"+"---------------"+"/n");
start=System.currentTimeMillis();
System.out.println("快速排序开始时间:"+new Timestamp(start));
quickSort(a4);
end=System.currentTimeMillis();
System.out.println("快速排序结束时间:"+new Timestamp(end));
System.out.println("长度为"+NUM+"的数组快速排序耗时"+(end-start)+"ms!");
// for(int i=0;i<a4.length;i++){
// System.out.print(a4[i]+",");
// }
// System.out.print("/n/n"+"---------------"+"/n");
}
//冒泡排序mpSort(int[])
//比较:(n-1)+(n-2)+...+1次,最多交换(n-1)+(n-2)+...+1次
//第1~n个,第1~n-1个,第1~n-2个...
public static void mpSort(int[] data) {
for (int i=0; i<data.length-1; i++) {
for(int j=0;j<data.length-1-i;j++){
if(data[j]>data[j+1]){
int temp = data[j];
data[j] = data[j+1];
data[j+1] = temp;
}
}
}
}
//选择排序xzSort(int[])
//比较(n-1)+(n-2)+...+1次,最多交换(n-1)次
//第1~n个,第2~n个,第3~n个...
public static void xzSort(int[] data) {
for (int i=0; i<data.length-1; i++) {
int k=i;
for(int j=i+1;j<data.length;j++){
if(data[k]>data[j]){
k=j;
}
}
int temp=data[i];
data[i]=data[k];
data[k]=temp;
}
}
//插入排序
//比较第i趟后,使得前i个有序
public static void crSort(int[] data) {
for (int i=0; i<data.length; i++) {
for (int j=0; j<i; j++) {
if (data[i]<data[j]) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
}
}
//快速排序qsSort(int[])//采用2分算法
public static void quickSort(int[] array) {
quickSort(array, 0, array.length - 1);
}
private static void quickSort(int[] array, int low, int high) {
if (low < high) {
int p = partition(array, low, high);
quickSort(array, low, p - 1);
quickSort(array, p + 1, high);
}
}
private static int partition(int[] array, int low, int high) {
int s = array[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (array[j] < s) {
i++;
swap(array, i, j);
}
}
swap(array, ++i, high);
return i;
}
private static void swap(int[] array, int i, int j) {
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
//结果
冒泡排序开始时间:2009-09-15 13:05:29.057
冒泡排序结束时间:2009-09-15 13:06:22.031
长度为100000的数组冒泡排序耗时52974ms!
---------------
选择排序开始时间:2009-09-15 13:06:22.031
选择排序结束时间:2009-09-15 13:06:53.927
长度为100000的数组选择排序耗时31896ms!
---------------
插入排序开始时间:2009-09-15 13:06:53.927
插入排序结束时间:2009-09-15 13:07:21.827
长度为100000的数组插入排序耗时27900ms!
---------------
快速排序开始时间:2009-09-15 13:07:21.827
快速排序结束时间:2009-09-15 13:07:21.874
长度为100000的数组快速排序耗时47ms!
相关文章推荐
- 算法 -- 几种基本排序深入探究
- 教你几种排序的基本算法
- 教你几种排序的基本算法
- 几种基本的排序算法:选择排序、插入排序、冒泡排序
- 算法 -- 几种基本排序深入探究
- 排序的几个基本算法
- OC学习之道:数据结构中几种常见的排序算法:选择排序,插入排序.快速排序
- 数据结构与算法--几种排序的实现(C++)
- JAVA基础day04 数组学习 排序和查找基本算法
- 【算法】几种排序代码
- 超级具体解读基本排序算法(不看懊悔,带排序演示动画)
- 【Python排序搜索基本算法】之堆排序
- C语言基本算法五排序【基础认知(理论)】
- 【Python排序搜索基本算法】之拓扑排序
- PHP数据结构基本算法一:矩阵转置 求素数 冒泡排序 选择排序
- 几种常用的排序算法:插入排序、冒泡排序、选择排序的算法及C++实现
- 几种常见的排序算法之比较
- java基本算法总结(冒泡排序、选择排序、插入排序)
- 【算法基础】冒泡、选择、插入排序(三种基本排序)
- 基本的排序算法之——选择排序法(对于固定的空间数组或者顺序表)