java实现的9种排序

阅读更多
交换排序:
1.冒泡排序
public static void bubble(int arr[]){
		for(int i=1;iarr[j+1]){
					swap(arr,j,j+1);
				}
			}
		}
	}



2.快排
	public static void quickSort(int a[],int left,int right){
		int i;
		if(left=base) {--right;}
			a[left] = a[right];
			while(left 
 

选择排序
1.直接选择

	public static void select(int a[]){
		int index;
		for(int i=0;i 
 

2.堆排序

public static void  heap(int[] data)
	{
		int n = data.length;
		for(int i=n/2-1;i>=0;i--){//从中间有叶子节点的数据开始
			 keepHeap(data,i,n);
		}
		while (n > 0) {
		  swap(data, 0, n-1);//把第一个和本次建堆的最后一个交换
		  keepHeap(data, 0,--n);//排除最后一个继续建堆
		}
	}
	
	/**
	 * 建(大/小顶)堆操作
	 * @param r
	 * @param index 本次建堆的起始下标
	 * @param length 本次建堆的数据长度
	 */
	 private static void keepHeap(int[] r, int index,int length) {
		 int x = r[index];
		 int j = 2 * index + 1;
		 while (j < length ) {//注意是: 下标 < 长度(不是 下标<最长的下表)
		 if (j < length - 1 && r[j] < r[j + 1])//判断是否存在右节点,且和左节点比较大小
		    ++j;
		 if (r[j] > x) {
		    r[index] = r[j];//上面小的变成下面大的
		    index = j;
		    j = 2 * index + 1; //继续向下
		   }else{
			   break;
		   }
		 }
		 r[index] = x;
	}


插入排序

1.直接插入排序

public static void insert(int a[]){
		for(int i=1;i=0 && t 
 

2.折半插入排序

	public static void halfInsert(int a[]){
		for(int i=1;i=small){
				int mid = (big+small)/2;
				if(a[mid]small 数值 均向前移动一位 
			for(int j=i;j>small;j--){
				a[j] = a[j-1];
			}
			a[big+1] = t;
		}
	}


3.希尔排序
方法1.

	public static void shell(int a[]){
		for(int span=a.length/2;span>=1;span--){
			for(int i=span;i=0 && a[j]>tmp){
					a[j+span] = a[j];
					j -= span;
				}
				a[j+span] = tmp;
			}
		}
	}


方法2:

	public static  void  shell2(Number[] data)
	{
		int span=data.length/7;
		if(span==0)span=1;
		while(span>=1){
			for(int i=0;i=0 && data[p].doubleValue() > temp.doubleValue()){
						data[p+span] = data[p];
						p -=span;
					}
					data[p + span] = temp;
				}
			}
			span=span/2;
		}
	}




方法1和2的微妙之处,至于1是在span之内先增加i,遇到块便向后查询
2是先循环一个块上的数据来排序,然后在span之内在递增
二者最外层都是在缩小span;
解释的不是很清楚,需要阅读代码
其他:

归并排序
/** 
	* 分治和归并 
	* @param a 
	* @param low 
	* @param high 
	* @param b 
	*/ 
    public static void mergeSort(int a[],int low,int high,int b[]){
    	int mid;
    	if(low 
 

基数排序

暂无



本文参照了网上一些文章,对此如有版权问题,请与我联系,放在这里主要是为了共同学习。

你可能感兴趣的:(java,冒泡排序,快速排序,选择排序,堆排序,插入排序,折半插入,希尔排序,归并排序)