【转】java常用排序算法

1, 直接插入排序

       基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

/**
	 * 插入排序
	 */
	public static void insertSort(){
		int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
		int temp=0;
		for(int i=1;i<a.length;i++){
			int j=i-1;
			temp=a[i];
			for(;j>=0&&temp<a[j];j--){
				//将大于temp的值整体后移一个单位  
				a[j+1]=a[j];
			}
			a[j+1]=temp;
		}
		for(int i=0;i<a.length;i++){
			System.out.println(a[i]);
		}
	}

 

2,希尔排序(最小增量排序)

      基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

/**
	 * 希尔排序
	 */
	public static void shellSort(){
		int a[]={1,54,6,3,78,34,12,45,56,100};
		double d1=a.length;
		int temp=0;
		while(true){
			d1= Math.ceil(d1/2);
			int d=(int) d1;
			for(int x=0;x<d;x++){
				for(int i=x+d;i<a.length;i+=d){
					int j=i-d;
					temp=a[i];
					for(;j>=0&&temp<a[j];j-=d){
						a[j+d]=a[j];
					}
					a[j+d]=temp;
				}
			}
			if(d==1)
				break;
		}
		for(int i=0;i<a.length;i++)
			System.out.println(a[i]);
	}

 

3.简单选择排序

    基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;

然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

/**
	 * 简单选择排序
	 */
	public static void selectSort(){
		int a[]={1,54,6,3,78,34,12,45};
		int position=0;
		for(int i=0;i<a.length;i++){
			int j=i+1;
			position=i;
			int temp=a[i];
			for(;j<a.length;j++){
				if(a[j]<temp){
					temp=a[j];
					position=j;
				}
			}
			a[position]=a[i];
			a[i]=temp;
		}
		for(int i=0;i<a.length;i++){
			System.out.println(a[i]);
		}
	} 

 

4.冒泡排序

    基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

/**
	 * 冒泡排序
	 */
	public static void  bubbleSort(){
		int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
		int temp=0;
		for(int i=0;i<a.length-1;i++){
			for(int j=0;j<a.length-1-i;j++){
				if(a[j]>a[j+1]){
					temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
		}
		for(int i=0;i<a.length;i++)
			System.out.println(a[i]);
	}

 

你可能感兴趣的:(java,算法,排序)