• 快速排序算方法


    快速排序算法的原理:
    在待排序的n个记录中任取一个记录(通常取第一个记录)为分区标准,把所有小于该排序码的记录移到左边,把所有大于该排序码的记录移到右边,中间放所选记录,称之为一趟排序;然后,对前后两个子序列分别重复上述过程。继续下去,知道所有记录都排好序。

     

    算法:

    头文件定义结构体:

     1 #ifndef QUICK_SORT
     2 #define QUCIK_SORT 1
     3 struct SortObject {
     4     int n;
     5     int * element;
     6 };
     7 #endif
     8 
     9 typedef struct SortObject * QuickSortObject;
    10 
    11 QuickSortObject createSortObject(int num)
    12 {
    13     QuickSortObject sort = NULL;
    14     sort = (QuickSortObject) malloc(sizeof(struct SortObject));
    15     if(NULL != sort)
    16     {
    17         sort->element = (int *) malloc(sizeof(int) * num);
    18         if(sort->element != NULL)
    19             sort->n = 0;
    20         else free(sort);
    21     }
    22     else
    23         printf("OUT OF SPACE");
    24     return sort;
    25 }
    26 
    27 void quick_sort(QuickSortObject object, int begin, int end)
    28 {
    29     int i = 0, j = 0;//头尾游标
    30     int temp = 0; //存放选中的中间值
    31     
    32     if(begin >= end)
    33         return;
    34     i = begin; j = end;
    35     temp = object->element[i];
    36     while(i != j)
    37     {
    38         while(i < j && object->element[j] >= temp)
    39             j--;
    40         if(i < j)
    41             object->element[i++] = object->element[j];
    42         while(i < j && object->element[i] <= temp)
    43             i++;
    44         if(i < j)
    45             object->element[j--] = object->element[i];
    46         
    47     }
    48 
    49     object->element[i] = temp;
    50     quick_sort(object, begin, i - 1);
    51     quick_sort(object, i + 1, end);
    52 }

    第27到52行为快速排序的算法核心。

    测试:

     1 #include "stdio.h"
     2 #include "stdlib.h"
     3 #include "quick.h"
     4 
     5 int main()
     6 {
     7     int num = 0, i = 0;
     8     QuickSortObject quicksort = NULL;
     9     
    10     num = 5;
    11     quicksort = createSortObject(num);
    12 
    13     printf("请输入要排序的序列:\n");
    14     for(i = 0; i < num; i++)
    15         scanf("%d", &quicksort->element[i]);
    16 
    17     quick_sort(quicksort, 0, num - 1);
    18     
    19     for(i = 0; i < num; i++)
    20         printf("%d ", quicksort->element[i]);
    21     return 0;
    22 } 
    一颗平常心,踏踏实实,平静对待一切
  • 相关阅读:
    单元测试
    软件测试计划
    软件杯A9的设计与实现
    阅读笔记7
    阅读笔记6
    阅读笔记5
    阅读笔记4
    阅读笔记3
    阅读笔记2
    阅读笔记1
  • 原文地址:https://www.cnblogs.com/hanyuan/p/2731767.html
Copyright © 2020-2023  润新知