数据结构之快速排序
来源:互联网 发布:2017百度春运大数据 编辑:程序博客网 时间:2024/06/07 04:37
数据结构之快速排序:
算法思想:
在待排序表中选择一个元素pivot作为基准,通过一趟排序将待排序表划分为两个独立的两部分,L[0~k-1]和L[k+1~length],使得L[0~k-1]的元素均小于pivot,L[k+1~length]的元素均大于pivot。此时,pivot放在了排序的最终位置上,这是一趟快速排序。
在递归的对L[0~k-1]、L[k+1~length]进行排序,当每部分只有一个元素或空,为止。此时,每个元素都放在了最终的位置上。
代码:
#include<stdio.h>#define ElemType int#define maxsize 20typedef struct{ ElemType data[maxsize]; int length;}sqlist;int flag=0; //用来计数,表示排序次数//------------------------打印顺序表的元素--------------------------------void printElem(sqlist* l){ int i=0; for(i=0;i<l->length;i++) printf("%d ",l->data[i]); printf("\n");}//---------------------------划分函数-------------------------------------int Partition(sqlist* l,int low,int high){ ElemType pivot=l->data[low]; while(low<high) //low>=high时跳出循环 { while(low<high&&l->data[high]>=pivot) --high; l->data[low]=l->data[high]; //将比枢轴值小的元素移动到左端 while(low<high&&l->data[low]<=pivot) ++low; l->data[high]=l->data[low]; //将比枢轴值大的元素移动到右端 }//while l->data[low]=pivot; //将枢轴元素放到最终位置 printf("第%d次快速排序的结果为:\n",++flag); printElem(l); return low; //返回存放枢轴的最终位置}//---------------------------排序函数-------------------------------------void QuickSort(sqlist* l,int low,int high){ if(low<high) { int pivotpos=Partition(l,low,high); QuickSort(l,low,pivotpos-1); //递归对左边的子表排序 QuickSort(l,pivotpos+1,high); //递归对右边的子表排序 }} //QuickSortint main(){ sqlist ll; ll.length=0; int i=0; for(i=0;i<maxsize;i++) { ll.data[i]=rand()%100; ll.length++; } printf("未排序的顺序表\n"); printElem(&ll); QuickSort(&ll,0,ll.length-1);}
运行结果:
阅读全文
1 0
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之------快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- 75道程序员逻辑思维面试题
- 图论500题
- Python实现文件内容搜索
- java变量排序
- px,dp,sp
- 数据结构之快速排序
- 浅谈js函数继承模式之三:共享原型模式
- 虚继承的偏移量问题
- Framework之锁屏分析与禁用锁屏
- 基于大数据技术的全国高速公路通行数据 动态监测平台建设
- JAVA8 lambda 微解
- 操作CSV文件例子,并且加上文字处理:统计相同功能的问题单(报告画图用)
- tensorflow和caffe共存问题
- 16进制转为10进制