• 数据结构排序-快速排序


    快速排序是对冒泡排序的改进,它的基本思想是通过一趟排序将数据分成两部分,一部分中的数据都比另一部分中的数据小,再对这两部分中的数据再排序,直到整个序列有序,如下图所示。

    快排的递归实现:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int n;
     5 
     6 /*
     7  * 分割使枢轴记录的左边元素比右边元素小
     8  */
     9 int Partition(int *array, int low, int high)
    10 {
    11     int pivotkey = array[low];
    12     array[0] = array[low];
    13     while (low < high)
    14     {
    15         while (low < high && array[high] >= pivotkey)
    16         {
    17             high--;
    18         }
    19         array[low] = array[high];
    20         while (low < high && array[low] <= pivotkey)
    21         {
    22             low++;
    23         }
    24         array[high] = array[low];
    25     }
    26     array[low] = array[0];
    27     return low;
    28 }
    29 
    30 /*
    31  * 快速排序递归实现
    32  */
    33 void QuickSort(int *array, int low, int high)
    34 {
    35     if (low < high)
    36     {
    37         int pivotloc = Partition(array, low, high);
    38         QuickSort(array, low, pivotloc - 1);
    39         QuickSort(array, pivotloc + 1, high);
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     int i;
    46     int *array;
    47     printf("请输入数组的大小:");
    48     scanf("%d", &n);
    49     array = (int*) malloc(sizeof(int) * (n + 1));
    50     printf("请输入数据(用空格分隔):");
    51     for (i = 1; i <= n; i++)
    52     {
    53         scanf("%d", &array[i]);
    54     }
    55     QuickSort(array, 1, n);
    56     printf("排序后为:");
    57     for (i = 1; i <= n; i++)
    58     {
    59         printf("%d ", array[i]);
    60     }
    61     printf("
    ");
    62 }

    冒泡排序的时间复杂度是O(n^2),快排是O(n*logn)。

    快排的非递归实现:

  • 相关阅读:
    教你认识Git
    jmeter跨线程组传递token
    win10企业版激活步骤
    jmeter录制浏览器Https请求
    win10程序无法正常启动0xc0000142
    PPT页面切换动画
    PPT页面动画制作
    查询一门成绩高于另一门课程的学生信息
    MongoDB固定集合-capped collection
    CoronaSDK场景管理库:Composer library (中)
  • 原文地址:https://www.cnblogs.com/niceforbear/p/4533758.html
Copyright © 2020-2023  润新知