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);
    
        }
  • 相关阅读:
    usb驱动开发6之端点描述符
    usb驱动开发5之总线设备与接口
    usb驱动开发4之总线设备驱动模型
    usb驱动开发3之先看core
    usb驱动开发2之代码地图
    usb驱动开发1之学习准备
    javascript限制上传文件大小
    google Chrome打开多个网站时等待可用的套接字,怎么加大连接数量提升速度
    sql将一张表的字段赋值给另一张表
    百度搜索网址参数的含义
  • 原文地址:https://www.cnblogs.com/LolaLiu/p/4678203.html
Copyright © 2011-2022 走看看