zoukankan      html  css  js  c++  java
  • 快速排序

    public static void swap(int data[],int p,int q){
             int temp = data[p];
             data[p] = data[q];
             data[q] = temp;
        }
    public static void QuickSort(int data[],int start, int end){
             if(start>=end)  return;
             int i = start;
             int j = end+1;
             //int temp = data[start];
             while(i<j){
                //① i<j是为了确保j和i不超出边界start和end
                 while(i<j&&data[--j]>data[start]);  //②j要在前是因为要确保j最后停在小于pivot的位置上
                 while(i<j&&data[++i]<data[start]);  //如果i在前面的话,很有可能,i=j的时候j还没有来得及移到小的位置就被i<j的条件拦在外面了
                 if(i<j){
                     swap(data,i,j);  
                     //③不可以在这里j--,i++,会导致当二者差2位时候,同时移动到同一位置后,那个位置不确定,导致最后与pivot换位的时候的不确定性
                 }else break;         
             }
             swap(data,start,j);
             QuickSort(data,start,j-1);
             QuickSort(data,j+1,end);
    
        } 
    
    public static void main(String[] args) {
            // TODO Auto-generated method stub
            int a[]={6,1,5,4,7,8,0,7,9,3,2,6,0};
            QuickSort(a,0,a.length-1);
            for(int i = 0; i<a.length; i++){ System.out.print(a[i]+",");}
            
            
        }
    void swap(int*p,int*q){
         int temp = *p;
         *p = *q;
         *q = temp;
    }
     
    void QuickSort(int data[],int start, int end){
             if(start>=end)  return;
             int i = start;
             int j = end+1;
             //int temp = data[start];
             while(i<j){
                 while(i<j&&data[--j]>data[start])  ;
                 while(i<j&&data[++i]<data[start])  ; 
                 if(i<j){
                     swap(data[i],data[j]);            
                 }         
             }
             swap(data[start],data[j]);
             QuickSort(data,start,j-1);
             QuickSort(data,j+1,end);
    
        } 
    void swap(int*p,int*q){
         int temp = *p;
         *p = *q;
         *q = temp;
    }
    int  partition(int*d,int start, int end){
         int center = (start+end)/2;
         if(d[start]>d[center])
         swap(d[start],d[center]);
         if(d[start]>d[end])
         swap(d[start],d[end]);
         if(d[center]>d[end])
         swap(d[center],d[end]);
         
         swap(d[center],d[end-1]);
         return d[end-1];
    }
    //A[start]最小作为j的警戒,pivot放在A[end-1]的地方,作为i的警戒
    void QuickSort(int data[],int start, int end){
             if(start>=end)  return;
             int pivot = partition(data,start,end);
             int i = start;
             int j = end-1;
             //int temp = data[start];
             while(i<j){
                 while(data[--j]>pivot)  ;
                 while(data[++i]<pivot)  ; 
                 if(i<j){
                     swap(data[i],data[j]);            
                 }         
             }
             swap(data[i],data[end-1]);
             QuickSort(data,start,i-1);
             QuickSort(data,i+1,end);
    
        }
  • 相关阅读:
    P2176 [USACO14FEB]路障Roadblock
    【最短路】Dijkstra+ 链式前向星+ 堆优化(优先队列)
    图论其一:图的存储
    【计算几何】二维凸包——Graham's Scan法
    P2742 【模板】二维凸包 / [USACO5.1]圈奶牛Fencing the Cows
    P2639 [USACO09OCT]Bessie的体重问题 【背包问题】
    如何评价代码质量的高低
    乔新亮-衡量企业 IT 团队价值的唯一指标是什么
    我总结了平台的5道坎
    hadoop namenode的工作机制
  • 原文地址:https://www.cnblogs.com/LolaLiu/p/4678203.html
Copyright © 2011-2022 走看看