原理:
1.把数组的第一个元素当做基准
2.从数组的第一个元素开始查找大于基准的下标,从最后一个元素开始向前寻找小于基准的下标,
3.交换i和j的值,
4.循环步骤2,3,直到i
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void swap(int *p1,int *p2)//交换两个值
{
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void show(int *p, int n)//显示
{
for (int i = 0;i < n;i++)
{
printf("%4d", p[i]);
}
printf("\n");
}
void pro(int *str,int L,int R)//排序
{
int i = L;
int j = R+1;
if (i<j)
{
do
{
do
{
i++;
} while (str[i]<=str[L]&&i<=R);//找出第一个比str[0]大的数
do
{
j--;
} while (str[j]>=str[L]&&j>L);//找出第一个比str[0]小的数
if (i < j)
{
swap(&str[i], &str[j]);
}
} while (i<j);
swap(&str[L],&str[j]);
pro(str, L, j - 1);
// printf("i=%d,j=%d",i,j);
pro(str, j + 1, R);
}
}
int main(int argc,char *args[],char *envp[])
{
time_t ts;
srand((unsigned int )time(&ts));
int num[10] = { 0 };
for (int i = 0;i < 10;i++)
{
num[i] = rand()%100;
}
show(num,10);
pro(num,0,9);
show(num,10);
system("pause");
return 0;
}
2.采用库提供的函数进行快速排序;
qsort包含在stdlib.h头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数
下面是实例代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void fill(int *a,int n)
{
time_t ts;
srand((unsigned int)(time(&ts)));
for (int i = 0;i < n;i++)
{
a[i] = rand()% 100;
}
}
void show(int *p,int n)
{
for (int i = 0;i < n;i++)
{
printf("%4d", *(p + i));
if (i%10==9)
{
printf("\n");
}
}
}
int com(const void *p1,const void *p2)//比较函数
{
const int *pint1 = p1;
const int *pint2 = p2;
if (*pint1==*pint2)
{
return 0;
}
else if(*pint1>*pint2)
{
return 1;
}
else
{
return -1;
}
}
int main()
{
//qsort();
int a[100];
fill(a,100);//随机生成数组
show(a,100);
printf("排序后的数组\n");
qsort(a, 100, sizeof(int), com);//快速排序
show(a,100);
system("pause");
return 0;
}