快排相关知识
来源:互联网 发布:鲁滨逊漂流记java游戏 编辑:程序博客网 时间:2024/05/22 11:56
快速排序
要排序的区间是[begin, end]
0.begin < end
1,val = arr[begin]
2.l = begin, r = end
2.1保证l< r
2.2从r往前找到一个小于val的值,r是是指向这个值
2.3从l往后找到一个大于等于val的值,l是指向这个值的
2.4交换l和r的值。
2.5如果l==r,arr[l] = val;
2.6否则回到2.1
3.假如已确定的值的下标是pos
递归将[begin, pos - 1]排序,递归将[pos + 1, end]排序
#include<stdio.h>
void quick_sort(int a[],int begin,int end);
int main()
{
int a[1000],i,n;
printf("请输入数组个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i]);
}
printf("排序前的数组为:");
for(i=0;i<n;i++)
printf("a[%d] = %d\t",i,a[i]);
printf("\n");
quick_sort(a,0,n-1);
printf("排序后的数组为:");
for(i=0;i<n;i++)
printf("a[%d] = %d\t",i,a[i]);
printf("\n");
return 0;
}
void quick_sort(int a[],int begin,int end)
{
int key,l,r,t,j;
if(begin<end) //0.begin < end
{
key = a[begin]; //1,val = arr[begin]
l = begin; //2.l = begin, r = end
r = end;
while(l<r) //保证l< r
{
while(l<r&&a[r]>=key) //2.2从r往前找到一个小于val的值,r是是指向这个值
{
r--;
}
while(l<r&&a[l]<=key) //2.3从l往后找到一个大于等于val的值,l是指向这个值的
{
l++;
}
if(l!=r) //2.4交换l和r的值。
{
t=a[l];
a[l]=a[r];
a[r]=t;
}
if(l==r) //2.5如果l==r,arr[l] = val;
{
j=l;
t=a[begin]; //易出错不能写成t=key;因为只是把key的值改了。
a[begin]=a[l];
a[l]=t;
}
}
quick_sort(a,begin,j-1); //递归将[begin, pos - 1]排序,递归将[pos + 1, end]排序
quick_sort(a,j+1,end);
}
}
- 快排相关知识
- 快排相关
- 快排相关
- 快排相关面试题
- 生产排程相关知识(一)
- 生产排程相关知识(二)
- 生产排程相关知识(三)
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- java中的异常
- 杂记
- 【JAVA基础】增,删,改,查
- RYU修改监听端口 Mininet在custom自建拓扑和连接到指定控制器命令解释
- poj1991解题报告
- 快排相关知识
- [Leetcode]-Maximum Subarray
- Android基础之Http基础详解
- java之设计模式---模板设计模式
- 省市区字典数组
- HTML基础
- 算法
- 省市区字典类型--OC方法
- 《深入理解Java虚拟机》:HotSpot虚拟机内的即时编译器