您的位置:首页 > 其它

介绍4个常用的排序法。冒泡排序、插入排序、快速排序、选择排序法

2012-03-30 20:11 411 查看
因为算法在编程用经常用到,不同的算法不用的效率。所以算法对我们来说很重要。
 引用 http://www.zhjie.net

冒泡排序,
import java.util.Calendar;public class BubbleSort {

/**
* 冒泡排序
*/
public static void main(String[] args) {
int num[] = new int[100000];
// 给num数组赋值
for (int i = 0; i < num.length; i++) {
num[i] = (int)(Math.random() * 1000);
}
//计算开始时间
Calendar cal=Calendar.getInstance();
System.out.println("输出排序前的时间:"+cal.getTime());
// 排序
for (int i = 0; i < num.length - 1; i++) { // 外层循环次数
for (int j = 0; j < num.length - 1; j++) { // 内层循环的次数
if (num[j] > num[j + 1]) {
// 设定一个临时变量并赋一个初值
int temp = num[j];
//交换位置
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
//排序后的时间
cal=Calendar.getInstance();
System.out.println("输出排序后的时间:"+cal.getTime());
//从小到大输出num
//		for(int i:num){
//			System.out.println(i);
//		}

}

}

 

 

2.插入排序,插入排序相对于冒泡排序来说,效果要提高一些

import java.util.Calendar;
import java.util.Date;

public class InsertSort {

/**
*插入排序
*/
public static void main(String[] args) {
int num[] = new int[100000];
// 给num数组赋值
for (int i = 0; i < num.length; i++) {
num[i] = (int) (Math.random() * 1000);
}

//计算开始时间
Calendar cal=Calendar.getInstance();
System.out.println("输出排序前的时间:"+cal.getTime());
//从第2个数开始循环
for(int i=1;i<num.length;i++){
//需要插入的数
int insert=num[i];
int index=i-1;

//index>=0 防止数组越界  insert<num[index] 是判断插入的数是否大于当前数
while(index>=0&&insert<num[index]){
//将num[index+1]往后移动一位
num[index+1]=num[index];
//将index往前移动
index--;
}
//如果插入的数小于num[index],就将insert插入到num[index]
num[index+1]=insert;
}
//排序后的时间
cal=Calendar.getInstance();
System.out.println("输出排序后的时间:"+cal.getTime());
//		for (int i : num) {
//			System.out.println(i);
//		}
}

}


 

3. 选择排序法 ,相对于上面两个来说,又快了不少

import java.util.Calendar;

public class SelectSort {

/**
* 选择排序法
*/
public static void main(String[] args) {
int arr[] = new int[100000];
// 给num数组赋值
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 1000);
}
//插入前的时间
Calendar cal=Calendar.getInstance();
System.out.println("排序前的时间:"+cal.getTime());
//循环长度-1次
for(int i=0;i<arr.length-1;i++){
//赋值一个数给最小值
int min=arr[i];
//记录最小数下标
int minIndex=i;
//设置临时变量
int temp=0;

for(int k=i+1;k<arr.length;k++){ //从i的下一个值开始循环
if(min>arr[k]){
min=arr[k];
minIndex=k;
}
}

//交换
temp=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=temp;
}
//排序后的时间:
cal=Calendar.getInstance();
System.out.println("排序后的时间:"+cal.getTime());
//从小到大输出num
//		for(int i:arr){
//			System.out.println(i);
//		}

}

}

 

 

4. 最霸气的快速查找法,这方法速度非常之快,100W的速度两秒钟搞定,只是占有内存也比较大的,

import java.util.Calendar;

public class QuickSort {

/**
* @快速排序法
*/
public static void main(String[] args) {
int arr[] = new int[1000];
// 给num数组赋值
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * 1000);
}
QuickSort qs=new QuickSort();
//排序前时间
Calendar cal=Calendar.getInstance();
System.out.println("开始时间:"+cal.getTime());

qs.sort(0, arr.length-1, arr);

//排序后时间
cal=Calendar.getInstance();
System.out.println("结束时间:"+cal.getTime());
}
//快速排序
public void sort(int left,int right,int arr[]){
int l=left;
int r=right;
int pivot=arr[(left+right)/2];
int temp=0;
while(l<r){
while(arr[l]<pivot)l++;
while(arr[r]>pivot)r--;

if(l>=r)break;

temp=arr[l];
arr[l]=arr[r];
arr[r]=temp;

if(arr[l]==pivot) --r;
if(arr[r]==pivot) ++l;
}
if(l==r){l++;r--;}
if(left<r) sort(left,r,arr);
if(right>l) sort(l,right,arr);
}

}


 

 

每个方法都有排序前后的对比时间,可以根据这个来判断每个方法的效率
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐