zoukankan      html  css  js  c++  java
  • 排序之快速排序(1)

    快速排序的思路是:首先拿a[start]作为轴,将原数组中比a[start]小的放small数组,将原数组中比a[start]大的放big数组,最后在将small数组 和a[start]值和big数组中的数复制回原数组。以此递归,使数组逐渐有序。
    
    快速排序的平均时间复杂度是nlogn。
    
    #include<stdio.h>
    #include<stdlib.h>
    #define N 1000000
    int array[N];
    int small[N];
    int big[N];
    void init_array(int a[],int n);
    void print_array(int a[],int n);
    void quick_sort(int a[],int start,int end);
    void Quick_sort(int a[],int n);
    int main()
    {
     init_array(array,N);
     //quick_sort(array,0,N-1);
     Quick_sort(array,N);
     print_array(array,N); 
    } 
    void init_array(int a[],int n)
    {
     int i;
     for(i=0;i<n;i++)
      a[i]=rand()%1000; 
    } 
    void print_array(int a[],int n)
    {
     int i;
     for(i=0;i<n;i++)
      printf("%d
    ",a[i]); 
    }
    void Quick_sort(int a[],int n)
    {
     quick_sort(a,0,n-1); 
    }
    void quick_sort(int a[],int start,int end)
    {
     if(start>=end) return;
     int mid;
     int temp,i,j=0,k=0;
     temp=a[start];
     for(i=start+1;i<=end;i++) 
     {
      if(a[i]<=temp)
      {
       small[j++]=a[i]; 
      } 
      else
      {
       big[k++]=a[i];
      }
     } 
     mid=start+j;
     for(i=0;i<j;i++)
     {
      a[start+i]=small[i];
     }
     a[mid]=temp;
     for(i=0;i<k;i++)
     {
      a[mid+1+i]=big[i];
     } 
     quick_sort(a,start,mid-1);
     quick_sort(a,mid+1,end);
    }
    

      

  • 相关阅读:
    支付宝H5 与网页端支付开发
    java图片操作--生成与原图对称的图片
    java 图片的自定义大小
    微信公众号开发(2)---消息的接收发送
    js 创建对象
    jqery多选
    金额大写转换
    js数字转换
    js日期格式转换
    java设计模式
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499358.html
Copyright © 2011-2022 走看看