数据结构 快速排序
2018-03-30 15:14
183 查看
快速排序是基于一种分治思想的排序,它的时间复杂度为O(nlogn),至于怎么分治呢?它的原理是:每次找一个标志数,本次函数的目的是为了找到他的正确位置。进而递归的找出所有数的正确位置,当然,在找的同时会把它左右两边的数有序!这里的有序是指它左边的数一定小于它(从小到大),右边的数一定大于它,不满足的话就交换两边的那对不符合要求的数。然后递归,去找两堆的数按这个规则继续“治理”。那么,既然是递归,我们治理的相似性完成了,出口是什么呢?当你把区间一直缩到只剩一个数字的时候他一定符合要求,结束递归!
代码如下:
代码如下:
#include<stdio.h> #define Elem_Size 110 typedef int Elemtype; /******快速排序******/ void QuickSort(int left,int right,Elemtype *book) { if(left>right) return ; int Lpoint,Rpoint; Elemtype Temp,Flag; Flag=book[left]; Lpoint=left; Rpoint=right; while(Lpoint<Rpoint) { while(Flag<=book[Rpoint] && Lpoint<Rpoint) Rpoint--; while(Flag>=book[Lpoint] && Lpoint<Rpoint) Lpoint++; if(Lpoint<Rpoint) { Temp=book[Rpoint]; book[Rpoint]=book[Lpoint]; book[Lpoint]=Temp; } } book[left]=book[Lpoint]; //由于到达这步左指针一定和右指针相等,只需要把标记值换进来即可 book[Lpoint]=Flag; /******分治******/ QuickSort(left,Lpoint-1,book); QuickSort(Lpoint+1,right,book); return ; } int main() { Elemtype array[Elem_Size]; int n,i; while(~scanf("%d",&n) && n) { for(i=0;i<n;i++) scanf("%d",&array[i]); printf("array未排序前:\n"); for(i=0;i<n;i++) printf("%d%c",array[i]," \n"[i==n-1]); QuickSort(0,n-1,array); printf("array排序后:\n"); for(i=0;i<n;i++) printf("%d%c",array[i]," \n"[i==n-1]); } return 0; }
相关文章推荐
- 数据结构和算法13 之快速排序
- 数据结构排序,冒泡,快速,直接选择,直接插入,希尔
- 数据结构(冒泡、快速、插入等排序)PHP && JAVA --面试技巧
- 数据结构之二分法查找、快速排序思想与实现
- 算法与数据结构——快速排序 Quick Sort
- 数据结构- 快速排序
- 微软等数据结构+算法面试100题(12)--快速排序
- 快速排序----C语言数据结构
- 数据结构:快速排序
- 浅谈算法和数据结构: 四 快速排序
- 数据结构 27 排序 排序-选择 插入 冒泡 希尔 快速归并 6种排序
- 【东东学数据结构】快速排序
- 数据结构之排序:快速排序
- 数据结构-链表快速排序
- c++实现数据结构中的各种排序方法:直接插入、选择,归并、冒泡、快速、堆排序、shell排序
- 数据结构 — 快速排序
- 【算法与数据结构必备】PHP常用排序算法:冒泡,快速排序,插入排序(一维数组)
- 数据结构排序之快速排序
- 【python】python数据结构(七)——排序:快速排序
- 数据结构一一快速排序