快速排序:
和归并排序一样,用了分治的思想,不过分的有些不同,归并排序是先把数组分的很小很小在进行简单的操作从而达到目的,也就是先分在排序,但是快速排序是先排序再分,我觉得快速排序把数字转来转去,其意思就是找到这个数在这个数组的位置,而且找到就不会变,有些像选择排序的意思,但是快速排序在比较的过程中没有为之后的操作做便利,快速排序不像选择排序那样固定的找,它把数分成了二类,原来选择排序每找一次只会在循环里减少一位的操作,但是快速排序直接每次减少了一半,而且运用了分治的方法后把选择排序要比较的有些浪费的操作大大减少;
#include<stdio.h>
void swap(int &x,int &y)
{
int temp;
temp=x;
x=y;
y=temp;
}
void pr(int a[],int l,int n)
{
for(int i=l;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
}
int px(int a[],int l,int r)
{
int temp=a[l];
int nl=l,nr=r;
int flag1=1,flag2=0;
int wz=l;
while(nl<nr)
{
if(flag1)
if(a[nr]>=temp)
nr--;
else
{
flag2=1;
flag1=0;
a[wz]=a[nr];
wz=nr;
nl++;
continue;
}
if(flag2)
if(a[nl]<=temp)
nl++;
else
{
flag1=1;
flag2=0;
a[wz]=a[nl];
wz=nl;
nr--;
continue;
}
}
a[nr]=temp;
// pr(a,l,r);
return nr;
}
void pxf(int a[],int l,int r)
{
if(l<r)
{
int w;
w=px(a,l,r);
pxf(a,l,w-1);
pxf(a,w+1,r);
}
}
int main()
{
const int n=10;
int a[n]={49, 38, 65, 97, 26, 13, 27, 49, 55, 4};
pxf(a,0,n-1);
pr(a,0,n-1);
return 0;
}