博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法排序之快速排序
阅读量:2193 次
发布时间:2019-05-02

本文共 1428 字,大约阅读时间需要 4 分钟。

快速排序(Quick Sort)

快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

1 算法描述

快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:

  • 从数列中挑出一个元素,称为 “基准”(pivot);
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  • 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

2 动图演示

3.代码实现

#include 
void swap(int *i, int *j){ int temp = *i; *i = *j; *j = temp;}int partition(int array[], int start, int end){ int pivot = array[start]; int j; j = start; for(int i = start + 1; i <= end; ++i) { if(array[i] < pivot) { swap(&array[j + 1], &array[i]);//还有没有更好的数据交换方式? ++j; } } swap(&array[start], &array[j]); return j;}void quickSort(int array[], int start, int end){ if(start >= end) { return; } int smallIndex = partition(array, start, end); if(smallIndex > start) quickSort(array, start, smallIndex - 1); if(smallIndex < end) quickSort(array, smallIndex + 1, end);}void print(int arr[], int len){ for(int i = 0; i < len; ++i) { printf("%d ", arr[i]); }}int main(){ int array[10] = {43, 49, 57, 12, 9, 32, 83, 28, 5, 51}; printf("quick快速排序前\n"); print(array, 10); printf("\n"); quickSort(array, 0, 9); printf("quik快速排序后\n"); print(array, 10); printf("\n"); printf("Hello World!\n"); return 0;}

快速排序是高效不稳定的排序

参考:

转载地址:http://qziub.baihongyu.com/

你可能感兴趣的文章
HTTP详解 1 -工作原理
查看>>
设计模式(五)适配器模式Adapter(结构型)
查看>>
PHP7新特性 What will be in PHP 7/PHPNG
查看>>
设计模式(七)组合模式Composite(结构型)
查看>>
操作系统内存管理——分区 页式 段式管理
查看>>
谷歌三大核心技术(三)Google BigTable中文版
查看>>
socket编程原理
查看>>
Google 开源技术protobuf
查看>>
PHP错误异常处理详解
查看>>
设计模式(六)桥连模式Bridge(结构型)
查看>>
架构师成长之路 1 --什么是架构师
查看>>
Memcache存储大数据的问题
查看>>
海量数据处理算法—Bit-Map
查看>>
信息论的熵
查看>>
设计模式 十二 职责链模式 Chain of Responsibility (对象行为
查看>>
数据结构-线性表
查看>>
Hadoop Hive与Hbase整合+thrift
查看>>
mysql or条件可以使用索引而避免全表
查看>>
Linux服务器性能评估与优化 一
查看>>
架构师成长之路 4 --架构师知识体系(方法)
查看>>