SORT

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] num_Array = {10,22,23,152,65,79,85,96,32,1};
		//insertSort(num_Array);
		//selectSort(num_Array);
	    //qSort(num_Array,0,num_Array.length-1);
		//bubbleSort(num_Array);
		heapSort(num_Array);
		out(num_Array);
	}
	

	public static void out(int[] num_Array) {
		for(int i:num_Array) {
			System.out.print(i+" ");
		}
		System.out.println();
	}
	
	//插入排序
	public static void insertSort(int[] num_Array) {
		for(int i=1;i<num_Array.length;i++) {
			int temp = num_Array[i];
			int j=i-1;
			for(;j>=0 && num_Array[j]>temp;j--) {  //逐步后移				
               num_Array[j+1] = num_Array[j];
			}
			num_Array[j+1] = temp;
		}
	}
	
	//直接选择排序
	public static void selectSort(int[] num_Array) {
		for(int i=0;i<num_Array.length;i++) {
			int temp = num_Array[i];
			
			//int min = temp;            //找到下标
			int k=i;
			for(int j=i+1;j<num_Array.length;j++) {
				if(num_Array[j]<temp) {
					k=j;
					temp=num_Array[j];
				}
			}
			
			//num_Array[i]=num_Array[k];
			//num_Array[k]=temp;		//temp==num_Array[k]	
		    num_Array[k]=num_Array[i];
		    num_Array[i]=temp;
		}
	}

	public static void qSort(int[] num_Array,int low,int high) {
        //无法执行
		//if(low<=high) {
		if(low>=high) {
			return ;
		}
		
		int partion = quickSort(num_Array,low,high);   //一趟排序

		qSort(num_Array,low,partion-1);
		qSort(num_Array,partion+1,high);
		
	}
	public static int quickSort(int[] num_Array,int low,int high) {
	    
		int key=num_Array[low];
		int i=low,j=high;
		
		while(i<j) {      //一趟排序
			while(num_Array[j]>=key && j>i) {   //不能“=”,i前面的均小于key
				j--;
			}
			num_Array[i]=num_Array[j];
			
			while(num_Array[i]<=key && i<j) {
				i++;
			}
			num_Array[j]=num_Array[i];
			
		}	
		
		//i==j
		num_Array[i]=key;
		
		//准备下一趟排序
		return i;
				
	}
	
	public static void bubbleSort(int[] num_Array) {
		for(int i=0;i<num_Array.length;i++) {
			for(int j=1;j<num_Array.length-i;j++) {
				 if(num_Array[j]<num_Array[j-1]) {
					 int temp=num_Array[j];
					 num_Array[j]=num_Array[j-1];
					 num_Array[j-1]=temp;
				 }
			}
		}
	}

	public static void heapSort(int[] num_Array) {
		heap(num_Array,num_Array.length);    //大根堆---升序
		//最开始建堆        length长度    
		//选出所有元素的最大值
		
		for(int i=num_Array.length-1;i>0;i--) {
			int temp=num_Array[i];
			num_Array[i]=num_Array[0];
			num_Array[0]=temp;
			heap(num_Array,i);
		}
	}

	//数组无序  , 只能找到最大值
	public static void heap(int[] num_Array,int size) {
		
		//从最后一个父节点开始调整
		int startIndex = size/2-1;
		for(int i=startIndex;i>=0;i--) {
			maxHeapify(num_Array,i,size);
		}
		
	}

	//大根堆
	public static void maxHeapify(int[] num_Array,int index,int size) {
		//左子节点 	2*fatherIndex
		//右子节点  2*fatherIndex+1    是否存在???
		
		//从0开始            index---index+1---2(index+1)---2(index+1)-1
		int leftChildIndex=2*index+1;
		int rightChildIndex=2*index+2;
		
		//不能看到子节点大就调换,要选取左右子节点中最大的****
		int largest=index;
		
//*********小于size 而不是小于等于size*******************
		if(leftChildIndex<size && num_Array[leftChildIndex]>num_Array[largest]) {
			largest=leftChildIndex;
		}
		
		if(rightChildIndex<size && num_Array[rightChildIndex]>num_Array[largest]) {
			largest=rightChildIndex;
		}

		
		//堆发生变化
		if(largest!=index) {
			int temp=num_Array[index];
			num_Array[index]=num_Array[largest];
			num_Array[largest]=temp;		
				
			//maxHeapify(num_Array,leftChildIndex);
			//maxHeapify(num_Array,rightChildIndex);
		
			maxHeapify(num_Array,largest,size);
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值