zoukankan      html  css  js  c++  java
  • 快速排序:升序+降序----java实现

    快速排序思路:先把第一个元素令为low下标,最后一个为high下标。并把第一个元素令为temp来作为标准元素。以标准元素来调整数组,使比标准元素小的都在标准元素前,比标准元素大的都在标准元素后。这样一次排序后,有两个好处:1.标准元素找到了它自己在该元素中的位置;2.把数组分成了以标准元素为分隔的两个子数组。然后分别对两个子数组采用相同的排序方法。那么明显就递归咯~~~

    一:升序快排

    package com.sheepmu.text;
    
    import java.util.Arrays;
     
      /*   
      * @author sheepmu
      */ 
    public class Sort {
    	 public static void main(String[] args){
    		 int[] arr={60,55,48,37,10,90,84,36};
    		 int len=arr.length;
    		 
    		 quickSort(arr,0,len-1);
    		 System.out.println("升序快排后----->"+Arrays.toString(arr));
    	 }	 	 
    	 public static  void quickSort(int[] arr,int low,int high){
    		 
    		 int i,j,temp;
    		 i=low;//低端下标
    		 j=high;//高端下标
    		 temp=arr[i];//取第一个元素为标准元素。
    		 
    		 while(i<j){//递归出口是 low>=high
    			 
    			 while(i<j&&temp<=arr[j]) //在数组的后端扫描
    				 j--;//移动后j再减了一个,即在temp前一个咯
    			 if(i<j){
    				 arr[i]=arr[j];
    				 i++;
    			 }
    			 
    			 while(i<j&&arr[i]<temp) //在数组的左端扫描
    				 i++;
    			 if(i<j){
    				 arr[j]=arr[i];
    				 j--;
    			 }
    			 
    		 }//while完,即第一盘排序
    		 arr[i]=temp;//把temp值放到它该在的位置。
    //		 System.out.println("第    次排序----->"+Arrays.toString(arr));
    		 if(low<i)
    			 quickSort(arr,low,i-1);//对左端子数组递归
    		 if(i<high)
    			 quickSort(arr,j+1,high);//对右端子数组递归
    		 
    		 
    	 }
    }	 
     

    二:降序快排

    import java.util.Arrays;    
      /*    
      * @author sheepmu 
      */   
    public class Sort {  
         public static void main(String[] args){  
             int[] arr={60,55,48,37,10,90,84,36};  
             int len=arr.length;     
             quickSort(arr,0,len-1);  
             System.out.println("降序快排后----->"+Arrays.toString(arr));  
         }         
         public static  void quickSort(int[] arr,int high,int low){   
             int i,j,temp;  
             i=high;//高端下标  
             j=low;//低端下标  
             temp=arr[i];//取第一个元素为标准元素。  
               
             while(i<j){//递归出口是 low>=high  
                   while(i<j&&temp>arr[j])//后端比temp小,符合降序,不管它,low下标前移
                	   j--;//while完后指比temp大的那个
                   if(i<j){
                	   arr[i]=arr[j];
                	   i++;
                   }
                   while(i<j&&temp<arr[i])
                	   i++;
                   if(i<j){
                	   arr[j]=arr[i];
                	   j--;
                   }
             }//while完,即第一盘排序  
             arr[i]=temp;//把temp值放到它该在的位置。  
          
             if(high<i) //注意,下标值	 
            	 quickSort(arr,high,i-1);//对左端子数组递归  
             if(i<low)  //注意,下标值
                 quickSort(arr,i+1,low);//对右端子数组递归  ;对比上面例子,其实此时i和j是同一下标!!!!!!!!!!!!!
      
         }  
    }      
     
    


  • 相关阅读:
    一个比较日期大小的javascript函数
    导出Excel(利用xml标记)
    Oracle 数据库的备份与恢复
    总是浮在页面底部的广告DIV
    实用批处理文件 (IP设置.bat, 清理系统垃圾.bat, atc.)
    【转:来源不详】几家IT公司面试全揭秘
    二级联动(javascript Array)
    JS实现定时循环上翻
    ORACLE函数大全 [转]
    C#中Timer类与线程
  • 原文地址:https://www.cnblogs.com/oversea201405/p/3766902.html
Copyright © 2011-2022 走看看