快要面试了,数据结构今天算是刚拾起来,所以最先看了排序里面最难的快排。所谓快排也就是首先记录第一个数字的值,这里我们叫他val,然后先跟最后面的数字进行比较,如果最后的数字比val大,那么,就跟最后一个数字的上一个比较,直到比val值小的时候,那么就将此时的值赋给之前指向的第一个数,然后再从第一个数开始进行比较,直到选到比val值大的数,然后赋给之前指向的右边的值,否则,则选择第一个值的后面一个。哈,可能解释的不清楚,不过我算是明白啦,代码如下
#include "iostream"
using namespace std;
int FindNum(int *a,int low,int high);
void Quick(int *a,int low,int high);
int main()
{
int a[7] = {5,2,6,8,4,3,7};
Quick(a,0,6);
for (int i = 0 ;i < 7 ; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
void Quick(int *a,int low,int high)
{
int pos;
if (high > low)
{
pos = FindNum(a,low,high);
Quick(a,low,pos-1);
Quick(a,pos+1,high);
}
return;
}
int FindNum(int *a,int low,int high)
{
int val = a[low];
while (high > low)
{
while(a[high]>val && high > low)
{
high--;
}
a[low] = a[high];
while (a[low]<val && high > low)
{
low++;
}
a[high] = a[low];
}
a[low] = val;
return high;
}