• 快速排序算法


    快速排序算法的性能取决于 划分的对称性

    快速排序 -- 选择划分基准

    <1>随机选择一个元素作为划分基准。

    <2>取子序列的第一个元素。

    <3>用中位数的中位数方法寻找划分基准。

    分治法

    分治策略:

    <1>分解:将原序列 a[s...t] 分解成两个子序列 a[s...i-1] 和 a[i+1...t]。其中 i = (s+t)/2;

    <2>求解子问题:若子序列的长度是0或1,则是有序的,直接返回;否则递归地求解各个子问题。

    <3>合并:由于整个子序列存放在数组 a 中,排序过程是就地进行的,合并步骤不需要执行任何操作。

     1 //快速排序 -- 分治法
     2 #include<stdio.h>
     3 void disp(int a[],int n){
     4     int i;
     5     for(i=0;i<n;i++)
     6         printf("%d ",a[i]);
     7     printf("
    ");
     8 } 
     9 int Partition(int a[],int s,int t){
    10     int i = s,j = t;
    11     int tmp = a[s];    //选取第一个记录作为基准 
    12     while(i != j){
    13         while(j > i && a[j] >= tmp)
    14             j--;
    15         a[i] = a[j];
    16         while(i < j && a[i] <= tmp)
    17             i++;
    18         a[j] = a[i];
    19     }
    20     a[i] = tmp;
    21     return i;
    22 }
    23 void QuickSort(int a[],int s,int t){
    24     int i;
    25     if(s<t){
    26         i = Partition(a,s,t);
    27         QuickSort(a,s,i-1);
    28         QuickSort(a,i+1,t);
    29     }
    30 }
    31 int main(){
    32     int n = 10;
    33     int a[] = {2,5,1,7,10,6,9,4,3,8};
    34     printf("排序前:
    ");
    35     disp(a,n);
    36     QuickSort(a,0,n-1);
    37     printf("排序后:
    ");
    38     disp(a,n);
    39     return 0; 
    40 } 
    View Code
  • 相关阅读:
    unity调用Android功能
    OnLevelWasLoaded 在脚本中执行顺序
    使用Sublime编写Shader
    将当前UI配置写入文件,并且恢复
    AssetBundle 点滴
    NGUI3.7的自适应问题
    Unity3D 消息框架设计
    Unity3D 任务系统设计
    Unreal 4
    基于DBLP的作者协作关系的挖掘
  • 原文地址:https://www.cnblogs.com/Hqx-curiosity/p/12149848.html
Copyright © 2020-2023  润新知