EOJ 1807 快速排序
2016-12-27 20:20
148 查看
#include <iostream>
#include <stack>
#include <vector>
#include <deque>
#include <string>
#include <math.h>
#include<stdlib.h>
#include<stdio.h>
void qsort(int a[],int low, int up)
{
int i,j;
int t;
if(low<up)//low<up时才有效
{
i=low;//令i,j分别取此时的最高位和最低位
j=up;
t=a[low];//t存储最低位的值
while(i!=j)//当i和j不相等时
{
while(i<j&&a[j]>t)//当i<j并且a[j]比t大,则j一直向前走
j--;
if(i<j)a[i++]=a[j];//如果a[j]<=t,那么将a[j]赋值给a[i],并且i+1
while(i<j&&a[i]<=t)//当a[i]<=t时,排序正常,则i继续向下走
i++;
if(i<j) a[j--]=a[i];//当a[i]>t时,不正常,则将此值赋给a[i],并且j向前移动
}
a[i]=t;//当i和j相等时,将t赋值给a[i]
qsort(a,low,i-1);//左右递归
qsort(a,i+1,up);
}
}
int main()
{
int n,a[20005];
scanf("%d",&n);//共有n个元素待排序
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,0,n-1);//调用qsort函数
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
快速排序的思想是取待排序的结点序列中某个结点的值作为控制值,采用某种方法把这个控制值放在适当的位置,使得这个位置的左面的所有的结点的值都小于等于这个控制值,而这个位置的右面的所有结点的值都大于这个控制值。注意方法的要点事“多次划分,多次递归"。每次递归注意他的low和up位。
#include <stack>
#include <vector>
#include <deque>
#include <string>
#include <math.h>
#include<stdlib.h>
#include<stdio.h>
void qsort(int a[],int low, int up)
{
int i,j;
int t;
if(low<up)//low<up时才有效
{
i=low;//令i,j分别取此时的最高位和最低位
j=up;
t=a[low];//t存储最低位的值
while(i!=j)//当i和j不相等时
{
while(i<j&&a[j]>t)//当i<j并且a[j]比t大,则j一直向前走
j--;
if(i<j)a[i++]=a[j];//如果a[j]<=t,那么将a[j]赋值给a[i],并且i+1
while(i<j&&a[i]<=t)//当a[i]<=t时,排序正常,则i继续向下走
i++;
if(i<j) a[j--]=a[i];//当a[i]>t时,不正常,则将此值赋给a[i],并且j向前移动
}
a[i]=t;//当i和j相等时,将t赋值给a[i]
qsort(a,low,i-1);//左右递归
qsort(a,i+1,up);
}
}
int main()
{
int n,a[20005];
scanf("%d",&n);//共有n个元素待排序
int i;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,0,n-1);//调用qsort函数
for(i=0;i<n-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[i]);
}
快速排序的思想是取待排序的结点序列中某个结点的值作为控制值,采用某种方法把这个控制值放在适当的位置,使得这个位置的左面的所有的结点的值都小于等于这个控制值,而这个位置的右面的所有结点的值都大于这个控制值。注意方法的要点事“多次划分,多次递归"。每次递归注意他的low和up位。
相关文章推荐
- 快速排序
- 快速排序思路与复杂度
- C 快速排序
- 06_程序员必须掌握的8大排序算法_快速排序
- 快速排序(非递归)
- 算法导论:快速排序及其随机化版本
- STL中对自定义数据类型的快速排序
- 算法导论快速排序实现
- 插入,冒泡,快速排序
- 排序算法-----快速排序简单介绍
- Quick Sort 快速排序
- qsort快速排序
- EOJ【1006】Prime 和素数有关的水题
- php冒泡排序与快速排序实例详解
- 交换排序:起泡排序 快速排序
- java 快速排序
- 第三篇:逆向之快速排序
- 复习一下快速排序(带非递归)
- 程序员必知的8大排序(三)-------冒泡排序,快速排序(java实现)
- 1045. 快速排序(25)