👏这个笔记是看了《啊哈!算法》之后,自己的一些小总结。
快速排序:
- 还是通过一个例子来说明:
- 有这样一个序列:3,2,1,5,4
- 要求从小到大排序
- 快速排序的想法:
- 1.先找一个基准数,这里默认为第一个数3;
- 2.然后将比3小的数移到3的左边,比3大的数移到3的右边;
- 3.后面用递归将3左边和右边的数组在实现一次上述操作。
代码如下:
#include<stdio.h>
int a[101],n;
void quicksort(int left,int right)
{
int i,j,t,temp;
i = left;
j = right;
if(i > j)
return;
temp = a[left];
while(i!=j)
{
while(a[j]>=temp && i<j)
{
j--;
}
while(a[i]<=temp && i<j)
{
i++;
}
if(i!=j)
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[left] = a[i];
a[i] = temp;
quicksort(left,i-1);
quicksort(i+1,right);
}
int main()
{
int i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
quicksort(1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}
/*
示例输出:
5
3 3 1 2 5
1 2 3 3 5
5
3 2 1 5 4
1 2 3 4 5
*/