zoukankan      html  css  js  c++  java
  • [C语言] 交换排序之快速排序的特性及实现

    [C语言] 交换排序之快速排序的特性及实现

     

    1、算法特性

      快速排序是对冒泡排序的一种改进,是一种不稳定的交换排序方法。当数据量庞大且随机无序时,快排是当前最快的排序方式;但当数据量较小、数据基本有序时,快排甚至会退化成冒泡排序。

      其时间复杂度最好、平均情况为O(nlog(2)n)、最差为O(n²),空间复杂度为O(nlog(2)n)。

     

    2、算法思路

      以升序排序为例,首先选取一个元素作为基准(通常选取数组两端的元素),通过算法将数组分割成所有元素均小于基准与所有元素均大于等于基准两个部分,这时基准元素处于二者之间,便完成一轮排序。然后再按照以上流程对两个部分分别进行新一轮的排序,通过递归使得整个数组有序。

     

    3、实现代码

     1 #include <stdio.h>
     2 
     3 // 快速排序的基础:每一个数据都应该有一个合适的位置 使左边的数小于或等于这个数,右边的数大于或等于这个数
     4 void _quick_sort(int arr[],int left,int rigth)
     5 {
     6     int key = arr[left];
     7     int i=left;
     8     int j=rigth;
     9     while(j > i)
    10     {
    11         for(; j>i && arr[j]>=key; j--);// 没有循环体
    12         if(j > i)
    13             arr[i] = arr[j];
    14 
    15         for(; j>i && arr[i]<=key; i++);
    16         if(j > i)
    17             arr[j] = arr[i];    
    18     }
    19     arr[i] = key;
    20     if(i-1 > left)
    21         _quick_sort(arr,left,i-1);
    22     if(i+1 < rigth)
    23         _quick_sort(arr,i+1,rigth);
    24 }
    25 
    26 void quick_sort(int arr[],int len)
    27 {
    28     _quick_sort(arr,0,len-1);    
    29 }
    30 
    31 void travel(int arr[],int len)
    32 {
    33     for(int i=0;i<len;i++)
    34     {
    35         printf("%d ",arr[i]);    
    36     }    
    37     printf("
    ");
    38 }
    39 
    40 int main()
    41 {
    42     int arr[] = {53,82,9,233,43,14,55,9,4,67};
    43     int len = sizeof(arr)/sizeof(arr[0]);
    44 
    45 /*    travel(arr,len);
    46     bubble_sort(arr,len);
    47     travel(arr,len);*/
    48 
    49     travel(arr,len);
    50     quick_sort(arr,len);
    51     travel(arr,len);
    52 
    53     return 0;
    54 }

     

    4、测试结果

  • 相关阅读:
    The xp_cmdshell proxy account information cannot be retrieved or is invalid. Verify that the '##xp_cmdshell_proxy_account##' credential exists and contains valid information.
    SQL SERVER-创建Alwayson
    Powershell-远程操作
    powershell-将powershell脚本排到JOB
    powershell-脚本运行权限政策
    Winserver-默认以管理员运行程序
    Powershell-创建Module
    SQL SERVER-查询爆破sa密码的主机
    power-virus
    141.Linked List Cycle 快慢指针
  • 原文地址:https://www.cnblogs.com/usingnamespace-caoliu/p/9433528.html
Copyright © 2011-2022 走看看