• 排序-java


    今天座右铭----每天的学习会让我们不断地进步!

    往往面试中都会让我们用一种排序方法做一道排序题,下面我就罗列出快速排序、冒泡排序、插入排序、选择排序的java代码!

    1、快速排序

    public class Quick_sort {

     /**   * @param args   */

     public static void main(String[] args) {  

     // TODO Auto-generated method stub      

    int arr1[]={1,0,-1,9,-100,90};           

    QuickSort quciksort=new QuickSort();      

    quciksort.sort(0,arr1.length-1,arr1);

          //输出最后结果     

      for(int i=0;i<arr1.length;i++){       

    System.out.print(arr1[i]+" ");     

      }      

    }  

    }

    class QuickSort{  

    public void sort(int left,int right,int array[]){  

     int l=left;  

     int r=right;   

    int pivot=array[(left+right)/2];   

    int temp=0;  

     while(l<r){   

     while(array[l]<pivot) l++;   

     while(array[r]>pivot) r--;       

     if(l>=r) break;    

       temp=array[l];    

    array[l]=array[r];   

     array[r]=temp;      

      if(array[l]==pivot) --r;   

     if(array[r]==pivot) ++l;   

    }     

     if(l==r){  

      l++;   

     r--;   }   

    if(left<r) sort(left,r,array);   

    if(right>l) sort(l,right,array);

      }

     }

    2、冒泡排序

    public class Bubble_sort {

     /**   * @param args   */

     public static void main(String[] args) {

      // TODO Auto-generated method stub     

      int arr1[]={1,0,-1,9,-100,90};           

    //创建一个Bubble类      

    Bubble bubble=new Bubble();      

    bubble.sort(arr1);      

    //输出最后结果      

    for(int i=0;i<arr1.length;i++){       

    System.out.print(arr1[i]+" ");     

      }    

       }

     }

    class Bubble{   

    public void sort(int arr[]){    

    int temp=0;       

    //排序      

      //外部排序,决定一共走几趟       

    for(int i=0;i<arr.length-1;i++){       

    //内层循环,开始逐个比较,如前一个比后一个大,则交换        

    for(int j=0;j<arr.length-1-i;j++){          

    if(arr[j]>arr[j+1]){          

    //换位          

     temp=arr[j];          

     arr[j]=arr[j+1];         

       arr[j+1]=temp;                 

         }        

    }      

      }  

      }

    }

    3、插入排序

    public class Insert_sort {

     /**   * @param args   */  

    public static void main(String[] args) {  

     // TODO Auto-generated method stub      

    int arr1[]={1,0,-1,9,-100,90};           

    Insert insert=new Insert();      

    insert.sort(arr1);      

    // System.out.println("排序后:"+cal.getTime());      

    //输出最后结果      

    for(int i=0;i<arr1.length;i++){       

    System.out.print(arr1[i]+" ");      

    }      

    }

     }

    class Insert{  

    //插入排序

     public void sort(int arr[]){  

     for(int i=1;i<arr.length;i++){    

    int insertVal=arr[i];    

    //insertVal准备和前一个数比较   

     int index=i-1;   

     while(index>=0&&insertVal<arr[index]){   

      //将把arr[index]向后移动    

     arr[index+1]=arr[index];    

     //让index向前移动   

      index--;    

    }   

     //将insertVal插入到适当位置  

      arr[index+1]=insertVal;   

    }

     }

    }

    4、选择排序

    public class Select_sort {

     /**   * @param args   */  

    public static void main(String[] args) {  

     // TODO Auto-generated method stub      

    int arr1[]={1,0,-1,9,-100,90};           

    //创建一个Select类       

    Select select=new Select();      

      //在排序前打印系统时间       

    //Calendar cal=Calendar.getInstance();     

       //System.out.println("排序前:"+cal.getTime());       

    select.sort(arr1);      

    // System.out.println("排序后:"+cal.getTime());     

      //输出最后结果      

    for(int i=0;i<arr1.length;i++){      

      System.out.print(arr1[i]+" ");      

    }      

    }  

    }

    class Select{  

    //选择排序  

    public void sort(int arr[]){  

     int temp=0;   

    for(int j=0;j<arr.length;j++){    

    //我默认第一个数就是最小   

     int min=arr[j];   

     //记录最小数的下标   

     int minIndex=j;   

     for(int k=j+1;k<arr.length;k++){    

     if(min>arr[k]){     

     //修改最小    

      min=arr[k];   

       minIndex=k;   

      }   

     }    

    //当退出for就找到最小值   

     temp=arr[j];  

      arr[j]=arr[minIndex];   

     arr[minIndex]=temp;  

    }

     }

    }

    附:二分查找

    public class BinaryFind {

     /**   * @param args   */

     public static void main(String[] args) {

      // TODO Auto-generated method stub      

      int arr[]={2,5,0,7,40,50};      

      //创建一个对象      

      Binary binary=new Binary();      

      binary.find(0,arr.length-1,7,arr);

    //7是要找的数  

    }

    }

    class Binary{

     public void find(int leftIndex,int rightIndex,int val,int arr[]){  

     //首先找到中间的数  

     int midIndex=(rightIndex+leftIndex)/2;   

    int midVal=arr[midIndex];   

      if(rightIndex>=leftIndex){  

     //如果要找的数比minVal大  

     if(midVal>val){   

     //在arr左边数找  

      find(leftIndex,midIndex-1,val,arr);  

         }else if(midVal<val){

       //在右边找

       find(midIndex+1,rightIndex,val,arr);

      }else if(midVal==val){  

      System.out.println("找到下标"+midIndex);

      }  

    }

    }

    }

    总之排序在学习语言过程中是很重要的知识点

  • 相关阅读:
    在排序数组中查找元素
    搜索旋转排序数组
    下一个排列
    括号生成(回溯法)
    PHP之表单
    PHP之超级全局变量
    PHP之数组
    PHP之字符串
    PHP之常量
    PHP之echo/print
  • 原文地址:https://www.cnblogs.com/qcnh/p/3398289.html
Copyright © 2020-2023  润新知