int* sortFunc (int *_array, int arraySize//arraySize تعداد المنت های آرایه را میگیرد
{

    int tempArray[arraySize] = {}; // آرایه ای که میخواهیم در آن عناصر مرتب شده را قرار دهیم

    for (int i = 0, tempPos = arraySize; i < arraySize; i++) // آغاز بررسی تک تک عناصر آرایه
    {

        // به این گونه کار میکند که برای بررسی هر عنصر یک متغیر به اندازه عناصر آرایه اصلی تعریف می شود و در حلقه که به تعداد عناصر ارایه تکرار میشود شرط میکنیم که اگر عدد مورد بررسی از هریک از اعداد قبل و بعد بزرگتر است یک واحد از عددی که هم اندازه تعداد کل عناصر است کم کند، با کمک این شرط میتوانیم موقعیت عدد را بدست آوریم. مثلا اگر عدد از چهار عنصر دیگر در ارایه بزرگتر باشد موقعیت آن باید خانه‌ی پنجم باشد
        int tempPosCounter = arraySize; //عددی که هم اندازه تعداد کل عناصر است
        for (int i2 = 0; i2 < arraySize; i2++)
        if (_array[i] >= _array[i2])
            tempPosCounter--;
        if (tempArray[tempPosCounter] != _array[i]) // ازین پس بررسی میکند که اگر این عدد از پیش تکرار شده است آن را در خانه های بعدی قرار دهد
            tempArray[tempPosCounter] = _array[i];
        else {
            bool reapetCheckerContinue = true;
            for (int reapetCheckerCounter = 1; reapetCheckerContinue; reapetCheckerCounter++)
                if (tempArray[tempPosCounter+reapetCheckerCounter] != _array[i])
                {
                    tempArray[tempPosCounter+reapetCheckerCounter] = _array[i];
                    reapetCheckerContinue = false;
                }
        }

    }
    return tempArray;
}

توضیح:

تقریبا هیچ راهی برای دریافت مستقیم اندازه یک آرایه در تابع وجود ندارد، به همین خاطر باید اندازه آرایه را به عنوان آرگومنت وارد کنیم. راه دیگر آن است که برای پایان آرایه، عددی را در نظر بگیرید تا در تابع تشخیص داده شود (مثلا -1 را به عنوان آخر ارایه تعیین کنید).

مثال:

int array[] = {4, 0, 2, 1, 3, 1};

    for (int i = 0; i < 5; i++)
        cout << sortFunc(array, 5)[i] << endl;

نتیجه:

 result:

0

1

1

2

3

4

 


منبع: cppdev.blog.ir

منبع آن وبلاگ cppdev.blog.ir می باشد.