{
int Min, Max;
Min = Max = arr[0];
for(int i = 1; i < arr.size(); i ++)
{
if(arr[i] < Min)
Min = arr[i];
if(arr[i] > Max)
Max = arr[i];
}
int Range = Max - Min + 1;
vector<int> Count(Range,0);
for(int i = 0; i < arr.size(); i ++)
Count[arr[i] - Min] ++;
int Index = 0;
for(int i = Min; i <= Max; i ++)
for(int j = 0; j < Count[i - Min]; j ++)
arr[Index ++] = i;
}
//end
- برچسب ها: شمارشی، مرتب سازی، مرتب سازی شمارشی، آرایه، تابع، Array، function، Sort، counting، counting sort، count sort،


تابع مرتب سازی سطلی یا صندوقی(Bucket Sort) که متوسط عملکرد آن (O(n است:
{
int* buckets = new int[max];
int SIZE = n;
for(int j = 0 ; j <= max ; j++)
buckets[j] = 0;
for(int i = 0 ; i < SIZE ; i++)
++buckets[a[i]];
for(i = 0 , j = 0 ; j <= max ; ++j)
for(int k = buckets[j] ; k > 0 ; k--)
a[i++] = j;
}
//end
- برچسب ها: function، Sort، bucket، bucket sort، آرایه، مرتب سازی، تابع، سطلی، صندوقی، مرتب سازی سطلی، مرتب سازی صندوقی، array،

مرتب سازی ادغامی، حل مسئله را به چند قسمت تبدیل کرده و آن ها را جدا حل میکند. به همین سبب از چندین تابع برخوردار است و متوسط عملکرد آن از رابطه O(n log n) بدست می آید.
{
m_sort(numbers, temp, 0, array_size - 1);
}
void m_sort(int numbers[], int temp[], int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
m_sort(numbers, temp, left, mid);
m_sort(numbers, temp, (mid+1), right);
merge(numbers, temp, left, (mid+1), right);
}
}
void merge(int numbers[], int temp[], int left, int mid, int right)
{
int i, left_end, num_elements, tmp_pos;
left_end = (mid - 1);
tmp_pos = left;
num_elements = (right - left + 1);
while ((left <= left_end) && (mid <= right))
{
if (numbers[left] <= numbers[mid])
{
temp[tmp_pos] = numbers[left];
tmp_pos += 1;
left += 1;
}
else
{
temp[tmp_pos] = numbers[mid];
tmp_pos += 1;
mid += 1;
}
}
while (left <= left_end)
{
temp[tmp_pos] = numbers[left];
left += 1;
tmp_pos += 1;
}
while (mid <= right)
{
temp[tmp_pos] = numbers[mid];
mid += 1;
tmp_pos += 1;
}
//modified
for (i=0; i < num_elements; i++)
{
numbers[right] = temp[right];
right -= 1;
}
}
//end
- برچسب ها: آرایه، مرتب سازی، ادغامی، Sort، merge، merge sort، function، تابع، مرتب سازی ادغامی، array،

تابع مرتب سازی درجی(Insertion Sort) که متوسط عملکرد آن О(n2) است:
{
int i , j , x;
for (i=2 ; i<=n ; i++)
{
x = arr [i];
j= i-1;
while( j>0 && arr [j] > x)
{
arr[j+1] = arr [j];
j--;
}
arr[j+1]=x;
}
}
//end
- برچسب ها: تابع، آرایه، درجی، مرتب سازی درجی، مرتب سازی، Sort، insertion sort، function، array،

تابع مرتب سازی سریع(Quick Sort) که متوسط عملکرد آن O(n log n) است:
{
int i = left, j = right;
int tmp;
int pivot = x[(left + right) / 2];
while (i <= j)
{
while (x[i] < pivot)
i++;
while (x[j] > pivot)
j--;
if (i <= j)
{
tmp = x[i];
x[i] = x[j];
x[j] = tmp;
i++;
j--;
}
}
if (left < j)
quickSort(x, left, j);
if (i < right)
quickSort(x, i, right);
}
//end
- برچسب ها: function، Sort، Quick sort، سریع، quick، مرتب سازی سریع، مرتب سازی، آرایه، تابع، array،

تابع مرتب سازی انتخابی(Selection Sort) که متوسط عملکرد آن О(n²) است:
{
int i, j, minIndex, tmp;
for (i = 0; i < len - 1; i++)
{
minIndex = i;
for (j = i + 1; j < len; j++)
if (arr[j] < arr[minIndex])
minIndex = j;
if (minIndex != i)
{
tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
}
}
//end
مرتب سازی آرایه ها (Sort):
عمل مرتب سازی در کامپیوتر، عمل بسیار مهمی محسوب میشود و بسیاری از روش های مرتب سازی باید بر روی آرایه ها انجام شود، از این رو الگوریتم های بسیاری برای مرتب سازی آرایه ها طراحی شده است. این الگوریتم ها از الگوریتم های ساده تا پیچیده طراحی شده اند و هم اکنون نیز تحقیقات برای بهبود روش های مرتب سازی ادامه دارد.
برای مرتب سازی آرایه یک بعدی، روش های مختلفی همچون روش مرتب سازی حبابی (Bubble Sort)، انتخابی (Selection Sort)، سریع (Quick Sort)، درجی (Insertion Sort)، ادغامی (Merge Sort) و ... وجود دارد که در تمامی روش های فوق تفاوت در روش مقایسه و جابجایی است، که باعث شده الگوریتم های متفاوتی تولید شوند.
در این بین الگوریتم مرتب سازی حبابی بسیار ساده و قابل فهم است.
در پست های آینده، توابع اکثر روش های مرتب سازی گذاشته خواهد شد.
آرایه یک بعدی به عنوان آرگومان تابع:
در زبان c++ همانگونه که میتوانیم انواع متغیر ها را به عنوان آرگومان به یک تابع ارسال کنیم، آرایه ها نیز میتوانند به عنوان آرگومان به توابع ارسال شوند. برای ارسال آرایه به تابع، باید نام آرایه به عنوان آرگومان ذکر شود. اگر آرایه به عنوان آرگومان تابع باشد، پارامتر معادل آن میتواند بصورت زیر تعریف شود:
1. آرایه با طول مشخص
2. آرایه با طول نامشخص که در این صورت بهتر است طول آرایه به آرگومان دیگری منتقل شود.
3. اشاره گر که میتوان اشاره گری به یک آرایه تعریف نمود.(در جلسات آینده با اشاره گر ها کاملا آشنا خواهید شد.)
شکل کلی ارسال آرایه به توابع:
void f2(int x[], int len);
void main()
{
int x[10];
f1(x);
f2(x,10);
}
void f1(int x[10])
{
...
}
void f2(int x[], int len)
{
...
}
//end
- برچسب ها: آرایه، طول آرایه، بعد، آرایه و توابع، تابع آرایه، function، 19، array،
مقدار دهی اولیه به آرایه تک بعدی:
در هنگام تعریف میتوان خانه های یک آرایه ی یک بعدی را مقداردهی اولیه نمود، در این حالت حداقل یک مقدار و حداکثر به تعداد عناصر آرایه میتوان مقدار دهی را انجام داد.
مقدار دهی به آرایه هنگام تعریف آن باید از خانه ی اول، پشت سر هم و به صورت پیوسته انجام شود.
مثال:
int x[3] = {10, 20};
int x[3] = {10, 20, 30};
//end
در زبان c++ در آرایه های یک بعدی فقط به شرطی میتوان بعد آرایه را خالی گذاشت که هنگام تعریف آن مقدار دهی نماییم، در غیر این صورت خطا خواهیم داشت.
مثال درست:
//end
- برچسب ها: آرایه، مقداردهی، مقدار دهی، مقداردهی اولیه، مقدار دهی اولیه، 18، بعد، خالی گذاشتن بعد، یعد خالی، array،
آرایه های یک بعدی:
تاکنون داده های ورودی و بقیه داده های مورد نیاز را در متغیر ها و ثابت ها ذخیره میکردیم. اما اگر تعداد ورودی ها زیاد باشد، نیاز داریم تعداد زیادی متغیر را تشکیل دهیم که این کار باعث میشود روند عملیات برنامه نویسی بسیار پیچیده شود. بنابراین برای جلوگیری از این مشکلات میتوانیم از امکان تعریف آرایه ها در زبان ++C بهره مند شویم.
آرایه ها خانه های پشت سر هم در حافظه هستند که همگی از یک نوع و با یک نام و با شماره های خانه متفاوت(اندیس آرایه) هستند.
روش تعریف آرایه یک بعدی:
نکته: محل هر عضو از آرایه توسط شماره(اندیس) که در [] می گذاریم، مشخص میشود.
نکته: اندیس شروع آرایه در زبان ++C صفر میباشد یعنی شماره گذاری خانه های آرایه از 0 شروع میشود و خانه ی اول آرایه اندیس 0 دارد.
نکته: در زبان ++C اسم آرایه آدرس خانه ی اول آرایه است.
- برچسب ها: آرایه، آرایه یک بعدی، آرایه تک بعدی، تعریف آرایه، 17، Array،
تبلیغات
