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

原创 2012年03月30日 20:11:14

因为算法在编程用经常用到,不同的算法不用的效率。所以算法对我们来说很重要。

 引用 http://www.zhjie.net

  1. 冒泡排序,
    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);
	}

}



 

 

每个方法都有排序前后的对比时间,可以根据这个来判断每个方法的效率

版权声明:本文为博主原创文章,未经博主允许不得转载。

java实现各种排序算法(包括冒泡排序,选择排序,插入排序,快速排序(简洁版))及性能测试

1、冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的。      它的时间复杂度是O(n*n),空间复杂度是O(1)      代码如下,很好理解。 ...
  • qq_21439971
  • qq_21439971
  • 2016年12月27日 14:36
  • 8057

排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)

排序算法实例(冒泡法排序、选择法排序、直接插入排序 、希尔法排序、折半插入排序)...
  • rl529014
  • rl529014
  • 2016年01月03日 18:33
  • 837

用JS实现冒泡排序、插入排序、选择排序、快速排序

这些基础的排序算法无论用什么语言,还是都能实现的。
  • ll328062201
  • ll328062201
  • 2014年09月30日 12:11
  • 1303

冒泡排序-插入排序-快速排序-选择排序---飞天博客

请看文章: 排序经典集合:插入排序,冒泡排序,快速排序,选择排序,代码简单请看下面的基本介绍和代码 插入排序:直接插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入到一排好序的有序表中   ...
  • xh199110
  • xh199110
  • 2014年09月29日 17:37
  • 1639

关于数组的排序问题(冒泡排序,选择排序,插入排序)

方法一:冒泡排序法 代码: public int[] bubbleSort(int[] a){ //冒泡排序算法 //每趟不断将相邻记录两两比较,并按“前小后大”(或“前大后小”)规...
  • qq_32144341
  • qq_32144341
  • 2016年05月10日 22:31
  • 2414

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

写在前面:                  排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列。因此排序掌握各种排序算法非常重要。...
  • aboluo321321
  • aboluo321321
  • 2014年07月17日 00:36
  • 2453

冒泡排序、选择排序、快速排序、插入排序(希尔排序)、堆排序(十大排序)

#include #include #include          void traverse_array(int,int *);     void output_array(int,...
  • sevenquan
  • sevenquan
  • 2015年12月24日 11:44
  • 803

java实现快速排序、插入排序、选择排序、冒泡排序算法

java实现快速排序、插入排序、选择排序、冒泡排序算法
  • SIMPLE1995
  • SIMPLE1995
  • 2016年05月02日 21:43
  • 241

各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序

各种常见的排序 要开始找工作了,把以前学的各种小知识复习一遍,以下是各种常见的排序的简单实现(冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序),至于原理就不写出来了,...
  • xwchao2014
  • xwchao2014
  • 2015年08月04日 16:41
  • 871

常见经典排序算法学习总结(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序、希尔排序、选择排序、冒泡排序、快速排序、堆排序、归并排序)进行了...
  • u010418035
  • u010418035
  • 2015年08月04日 17:53
  • 2527
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:介绍4个常用的排序法。冒泡排序、插入排序、快速排序、选择排序法
举报原因:
原因补充:

(最多只允许输入30个字)