快速练习

xiaoxiao2021-02-28  22

快速排序简要 问题:将一个数组进行调整,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)   ;      }          }     
转载请注明原文地址: https://www.6miu.com/read-750081.html

最新回复(0)