用快速排序法对一组数据由小到大进行排序,数据分别为99,45,12,36,69,22,62,796,4,696.
- 快速排序是冒泡排序的一种改进,主要的算法思想是在待排序的n个数据中取第一个数据作为基准值,将所有记录分为3组,使第一组数中各数据值均小于或等于基准值,第二组做基准值的数据,第三组中各数据值均大于或等于基准值。这便实现了第一趟分割,然后再对第一组和第三组分别重复上述方法,依此类推,直到每组中只有一个记录为止。
方法一:
#include <stdio.h>
void qusort(int s[],int start,int end)
{
int i,j;
i=start; /*将每组首个元素赋给i*/
j=end; /*将每组末尾元素赋给j*/
s[0]=s[start]; /*设置基准值*/
while(i<j)
{
while(i<j&&s[0]<s[j])
j--; /*位置左移*/
if(i<j)
{
s[i]=s[j]; /*将s[j]放到s[i]的位置上
i++; /*位置右移*/
}
while(i<j&&s[i]<s[0])
i++;
if(i<j)
{
s[j]=s[i];
j--;
}
}
s[i]=s[0];
if(start<i)
qusort(s,start,j-1);
if(i<end)
qusort(s,j+1,end);
}
void main()
{
int i,a[11];
printf("请输入10个数:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
qusort(a,1,10);
printf("排序后的顺序是:\n");
for(i=1;i<11;i++)
printf("%5d",a[i]);
}
方法二:
#include <stdio.h>
#include <stdlib.h>
void qusort(int a[],int start,int end)//对start和end之间的元素排序
{
int i,j,t;
i=start;
j=end;
if(start<end)//区间内至少存在两个元素
{
t=a[start];//用区间的第一个元素做基准
while(i!=j){//从区间两端开始扫描,直到i和j相等
while(a[j]>=t&&i<j)//从右向左,找到第一个小于t的元素
j--;
a[i]=a[j];//i,j上的元素交换
while(a[i]<=t&&i<j)
i++;
a[j]=a[i];
}
a[j]=t;
qusort(a,start,j-1);
qusort(a,j+1,end);
}
}
void main()
{
int i,a[10];
printf("请输入十个数:");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
qusort(a,0,9);
printf("排序后的数组为:");
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}