阅读背景:

把数组中负数放在左边零在中间正数放右边

来源:互联网 
void swap(int &A, int &B)
{
    int tmp = A;
    A = B;
    B = tmp;
}

void rangeArray(int *Array, int len)
{
    int low   = 0;
    int hight = len-1;
    int zero     = 0;

    //思想是进行两次快速排序
    while(low < hight)
    {
        while (Array[low] <= 0) low++;

        while (Array[hight] > 0) hight--;

        if (low < hight)
        {
            swap(Array[low], Array[hight]);
        }
    }

    low  = 0;
    zero = hight;

    while(low < zero)
    {
        while (Array[low] < 0) low++;
        while (Array[zero] == 0) zero--;

        if (low < zero)
        {
            swap(Array[low], Array[zero]);
        }
    }
}


void rangeArray2(int *arr, int len)
{

    // cur 为当前比较的数字
    // rightBorderNegative 
    // leftBorderPositive

    // 算法
    int rightBorderNegative=0,cur=0,leftBorderPositive=len-1;

    //思想: 若arr[cur]大于0,扔到leftBorderPositive后面; 若arr[cur]小于0,扔到rightBorderNegative前面
    while(mid <= high)
    {
        if (arr[cur]<0)
            swap(arr[rightBorderNegative++],arr[cur++]); //当前比较的数字若小于0,就会被和low置换,就是说low之前的数字都小于0
        else if(arr[cur]==0)
            cur++;
        else
            swap(arr[cur], arr[leftBorderPositive--]); //当前比较的数字若大于0,就会被和hight置换,就是活hight之后的数字都大于0
    }	
}void swap(int &A, int &B)
{
    int tmp = A;
  



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: