排序算法------快速排序
2013-01-05 11:45
211 查看
#include<stdio.h> #include<stdlib.h> #define Status int #define max 20 typedef struct { Status key; }ElemType; typedef struct { ElemType r[max]; int length; }Sqlist; void Inital(Sqlist &L) //初始化 { L.r[1].key=49; L.r[2].key=38; L.r[3].key=65; L.r[4].key=97; L.r[5].key=76; L.r[6].key=13; L.r[7].key=27; L.r[8].key=49; L.length=8; } bool LT(int i,int j) { if(i<j) return true; else return false; } int Partition(Sqlist &l,int low ,int high) //一趟排序(将原有序列分为两部分) { int pivotkey; l.r[0]=l.r[low]; pivotkey=l.r[low].key; //记录关键字 while(low<high) { while(low<high&&l.r[high].key>=pivotkey) --high; //从序列的右端起找到第一个比关键字小的记录 l.r[low]=l.r[high]; //将这个小的记录放在之前低位 while(low<high&&l.r[low].key<=pivotkey) ++low; //从序列的左端起找到第一个比关键字大的记录 l.r[high]=l.r[low];//将这个大的记录放在之前的位置上 } l.r[low]=l.r[0]; //找到关键字正确的所在位置 return low; //返回关键字位置 } void QSort(Sqlist &l,int low,int high) //快速排序函数 { int pivotkey; if(low<high){ pivotkey =Partition(l,low,high);//找到关键字正确位置 QSort(l,low,pivotkey-1); //依照关键字位置将原序列分为两部分,在递归,分治 QSort(l,pivotkey+1,high); } } void QuickSort(Sqlist &l) //快速排序函数 { QSort(l,1,l.length); } void print(Sqlist l) { int i; printf("排序后的结果为:"); for(i=1;i<=l.length;i++) { printf("%d ",l.r[i].key); } } void main() { Sqlist l; Inital(l); QuickSort(l); print(l); getchar(); getchar(); } //算法分析:1.时间复杂度为O(nlogn) //2.当原纪录无序时跟其他方法中,快速排序是最好的一种
相关文章推荐
- 排序算法之快速排序
- 排序算法之快速排序
- 一种排序算法(快速排序)
- 排序算法之快速排序
- 排序算法之快速排序详解
- 排序算法C++11实现——冒泡、选择、插入、希尔、堆、合并、快速排序(非递归)
- 排序算法之快速排序
- 排序算法-快速排序
- 【排序算法】排序算法之快速排序
- 算法系列(四)排序算法中篇--归并排序和快速排序
- 排序算法总结(归并排序、快速排序)(python实现)
- 白话排序算法(归并排序,快速排序)
- 排序算法之快速排序
- 排序算法之快速排序
- 算法 排序算法之交换排序--冒泡排序和快速排序
- 06_程序员必须掌握的8大排序算法_快速排序
- 排序算法-快速排序(入门)
- 排序算法-(随机)快速排序(递归)
- 程序员必须掌握的8种排序算法(六):快速排序
- 排序算法之快速排序