快速排序

class ArrayIns{
    private int theArray[];
    public ArrayIns(int nums[]){
            theArray = nums;    }
 // 划分操作
    public int partitionIt(int left, int right, long pivot){        
    	int leftPtr = left - 1;//此处-1是为了防止最右端数据小于其他所有数据
 //右指针一直向左移动并最终出现数组越界异常
    	int rightPtr = right;        
   	 while(true){            
    		while(theArray[++leftPtr] < pivot);            
    		while(rightPtr > 0 && theArray[--rightPtr] > pivot);            						
		if(leftPtr >= rightPtr) break;            
    		else swap(leftPtr, rightPtr);
        }        
    	swap(leftPtr, right);        
    	return leftPtr;    
    }    
    public void swap(int dex1, int dex2){        
    int temp = theArray[dex1];        
    theArray[dex1] = theArray[dex2];        
    theArray[dex2] = temp;    
    }    
    public void quickSort(int num[]){        
    recQuickSort(0, num.length-1);       
    }
//在进行快速排序时,将子数列的最右端取出并作为枢纽。在对子序列排序完毕后
//和下标维leftPtr的数据交换。
    public void recQuickSort(int left, int right){        
    	if(right - left <= 0) return;        
    	else{            
    	int pivot = theArray[right];            
    	int partition = partitionIt(left, right, pivot);            		   
    	recQuickSort(left, partition-1);
    	recQuickSort(partition + 1, right);        
    	}   
    }
}

交换枢纽位置
交换枢纽位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值