快速练习

快速排序简要
问题:将一个数组进行调整,a【0】左边都是比它小的数,a【0】的右边都是比他大的数。
思想:
简称挖坑排序法,学称快速排序法。
i的初始位置在a【0】,j的初始位置在a【n-1】
将a【0】取走,临时存放于一个x数种。
j从后向前遍历,查找比a【0】小的数字,找到后将其值赋给a【i】,i向后移动一位,此时a【j】位置空出来了。
i从前向后遍历,查找比a【0】大的数字,找到后将其赋给 a【j】,j向前移动一位,此时a【i】位置空出来了。
重复循环上两个步骤,直到i=j为止。此时将x的值赋予a【i=j】;
得到的新数组,a【i】的左边是小于它的数,右边的数是大于它的数。\\等于他的数不用管,所以排序不稳定。


int FSOD(int *a,int s,int n)  
{
x=a[s];
i=s;
j=n-1;
while(i<j)
{
while(a[j]>=x&&i<j)
j--;
 
 
   if(i<j)
{
a[i]=a[j];
i++;
   }
 
 
while(a[i]<=x&&i<j)
i++;
 
   if(i<j)
   {
    a[j]=a[i];
    j--;
}
 




}

a[i]=x;

return i;

 }
 
 
 ALLFSOD(int* a,int s,int n)
 {
  if(s<n)
 
 
  {
 
  i=fsod(a,s,n);
 
ALLFSOD(a,s,i-1;)  ;
 
  ALLFSOD(a,i+1,n)   ;
 
 
 }
 
 
 
 
 }
 
  

猜你喜欢

转载自blog.csdn.net/gaocui883/article/details/77998202