• 快排


     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 void Qsort ( int a[] , int low , int high )
     4 {
     5     if( low >= high )
     6         return ;
     7     int first = low ;
     8     int last = high ;
     9     int key = a[first] ;
    10     while ( first < last )
    11     {
    12         while ( first < last && a[last] >= key )
    13             last--;
    14         a[first] = a[last];
    15         while ( first < last && a[first] <= key )
    16             first++;
    17         a[last] = a[first];
    18     }
    19 
    20     a[first] = key ;
    21     Qsort ( a , low , first - 1 );
    22     Qsort ( a , first + 1 , high );
    23 }
    24 int main()
    25 {
    26     int i;
    27     int a[] = {12,341,453,14,657,1341,767,784,3453,4312,4535,
    28     564,312,564,3,45,96,4,32,54,13,21,13541};
    29     Qsort ( a , 0 , sizeof(a)/sizeof(a[0]) - 1 );
    30     for( i = 0 ; i < sizeof(a)/sizeof(a[0]) ; i++ )
    31     {
    32         printf("%d ", a[i] );
    33     }
    34     printf("
    ");
    35     return 0;
    36 }
    C

    http://baike.baidu.com/link?url=1n_Hw5RAPsGdCclDZ-ToREy57uT3uhiwpuuvod86Ut8GF6uzSuqFPxOZBYROWb-7Z-S46QFP_pAx_m4HUNcWAK#3_2

    百度上的版本是以a[1]为“标杆”,下面这个版本是学长提供的以一个随机数a[rand]作为“标杆”。

    还有Qsort 是会退化成n^2 , 运气很差时:比如说从小到大排时 , 每快 标杆 都取到了每块的最大值。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<time.h>
     4 #include<iostream>
     5 using namespace std;
     6 void Qsort ( int* a , int l , int r )//a[l,r)
     7 {
     8     int len = r - l ;
     9     if( len <= 1 ) return ;
    10     int pos = rand() %  (r - l);
    11     swap( a[l+pos] , a[r-1] );
    12     int cnt = 0 ;//计算 <= a[r-1] 的数共有j个
    13     for(int i = l ; i < r ; i++)
    14     {
    15         if ( a[i] <= a[r-1] ) {
    16             swap( a[l+cnt] , a[i] );
    17             cnt++ ;
    18         }
    19     }
    20     Qsort(a , l , l + cnt - 1);
    21     Qsort(a , l + cnt , r );
    22 }
    23 int main()
    24 {
    25     srand(time(NULL));//根据运行时间随机生成一个数
    26   //  printf("srand=%d
    ",rand());
    27     int a[] = {10,45,85,78,96,32,20,45,20,10,32,1,5,6,25,10,96,74};
    28 
    29     Qsort ( a , 0 , sizeof(a)/sizeof(int) );
    30     for ( int i = 0 ; i < sizeof(a)/sizeof(int) ; i++ )
    31     {
    32         printf( "%d " , a[i] );
    33     }
    34     printf("
    ");
    35     return 0 ;
    36 }
    C++
  • 相关阅读:
    Linux 命令笔记
    MySQL指令笔记
    悲观锁与乐观锁
    缓存在高并发场景下的常见问题
    死锁相关问题
    Java并发性和多线程
    Java同步和异步,阻塞和非阻塞
    内存溢出和内存泄漏
    JavaAndroid项目配置文件笔记
    Maven安装配置
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4239891.html
Copyright © 2020-2023  润新知