快速排序<参考数据结构>
来源:互联网 发布:巨人网络注册 编辑:程序博客网 时间:2024/06/08 00:47
#include <stdio.h>
#define NR(x) sizeof(x)/sizeof(x[0])
int partitions(int a[],int low,int high);
void quicksort(int a[],int low,int high);
void print(int *a,int count){ //打印数组
int i;
for(i=0;i<count;i++){
printf("%d ",a[i]);
}
printf("\n");
}
int main(void){
int a[]={12,68,0,1,65,2,23,1,5,99,30,12};
print(a,NR(a)); //排序前打印
quicksort(a,0,NR(a)-1);
print(a,NR(a)); //排序后打印
return 0;
}
/*
将数组小标为0的的值(a[0]),作为排序基准值。
将low=0,high=NR(a)并取对应的基准值对比,即分成两端进行
1、high端,比基准值小的往则将对应的值往low端扔,扔完high自身减去1.否则自身减去1
2、low端,如果比基准值小或者等于基准值,则low--,否则将low对应的值往高处high扔,并且high自身减去1
3、由于1步骤中将low值覆盖,因此当low=high时 low对应的数值元素刚好为基准值
*/
int partitions(int a[],int low,int high){
int pivotkey=a[low]; //将比较的key设置为数组的最低值
// printf("%d\n",pivotkey);
while(low!=high){ //当low!=high时进行比较操作
while(a[high]>pivotkey&&low<high) //1、low<high,当最高位大于基准时,不进行交换。并将最高位的下标减1
high--;
if(low<high){ //2、low<high,在1的基础上推出,a[high]<=pivotkey时,将小标为high的值给a[low],并且low自身加1
a[low++]=a[high];
}
while(a[low]<=pivotkey&&low<high)//3、当数组下标最低为low的值小于或等于基准时,low自身+1
low++;
if(low<high){ //4、当low<high时,在3的基础上推出a[low]>pivotkey时,并交换最高位和最低位
a[high--]=a[low];
}
}
a[low]=pivotkey;//此时low=high
// print(a,NR(a));
return low;
}
void quicksort(int a[],int low,int high){
int pivottag;
if(low<high){
pivottag=partitions(a,low,high);
qsort(a,low,pivottag-1); //二分法进行分段递归排序
qsort(a,pivottag+1,high);
}
}
- 快速排序<参考数据结构>
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- 数据结构之快速排序
- 数据结构练习:快速排序
- 数据结构之快速排序
- 数据结构之------快速排序
- 数据结构之快速排序
- 数据结构 快速排序
- 数据结构之快速排序
- 【数据结构】快速排序
- 数据结构_快速排序
- 数据结构 - 快速排序
- C++数据结构--快速排序
- C++数据结构--快速排序
- 数据结构--冒泡、快速排序
- 数据结构之快速排序
- 数据结构之快速排序
- [数据结构]快速排序
- 大话编码
- 设计模式——简单工厂
- servlet应用之cookies&session操作
- Hibernate配置文件解析
- 定期任务的业务及其实现逻辑简单记录
- 快速排序<参考数据结构>
- 设计模式——工厂方法
- 你知道1+1=2是如何在cpu中运作的么?----跟我到cpu内部去看看吧!(1)
- 算法基础(三)——排序
- 面向对象语言编程的学习视频(类的封装性)
- 效率。。笔记
- 有关答疑事项
- 套接字究竟是什么?
- 安装monit