#include <iostream>
#include <string.h>
using namespace std;
void qsort(int arr[], int left, int right)
{
if (left >= right)
{
return;
}
int l_point = left, r_point = right;
int mid_arr = arr[left];
while (l_point < r_point)
{
while (l_point < r_point && arr[l_point] < mid_arr)
{
l_point++;
}
while (l_point < r_point && arr[r_point] > mid_arr)
{
r_point--;
}
int temp = arr[l_point];
arr[l_point] = arr[r_point];
arr[r_point] = temp;
}
qsort(arr, left, l_point - 1);
qsort(arr, l_point + 1, right);
}
void bubble_sort(int arr[], int len)
{
for (int i = 0; i < len - 1; ++i)
{
for (int j = 0; j < len - 1 - i; ++j)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void select_sort(int arr[], int len)
{
for (int i = 0; i < len - 1; ++i)
{
int min = i;
for (int j = i + 1; j < len; ++j)
{
if (arr[j] < arr[min])
{
min = j;
}
}
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
void insert_sort(int arr[], int len)
{
for (int i = 1; i < len; ++i)
{
int j = i-1;
int key = arr[i];
while (j>=0 && arr[j]>key)
{
arr[j+1] = arr[j];
j--;
}
swap(arr[j+1],key);
}
}
void max_heapify(int arr[], int start, int end)
{
int dad = start;
int son = dad * 2 + 1;
while (son <= end)
{
if (son + 1 <= end && arr[son] < arr[son + 1])
{
son++;
}
if (arr[dad] > arr[son])
{
return;
}
else
{
swap(arr[son], arr[dad]);
dad = son;
son = dad * 2 + 1;
}
}
}
void heap_sort(int arr[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--)
{
max_heapify(arr, i, n - 1);
}
for (int i = n - 1; i > 0; i--)
{
swap(arr[0], arr[i]);
max_heapify(arr, 0, i - 1);
}
}
void shell_sort(int arr[],int n)
{
int j;
for (int gap = n>>1; gap >0 ; gap >>= 1)
{
for (int i = gap; i < n; ++i)
{
int temp = arr[i];
for (j = i-gap; j >=0 && arr[j] > temp; j-=gap)
{
arr[j+gap] = arr[j];
}
arr[j+gap] = temp;
}
}
}
void merge_sort(int arr[],int reg[],int start,int end)
{
if(start>=end)
{
return;
}
int len = end - start;
int mid = start+len/2;
int start1 = start,end1 = mid;
int start2 = mid+1,end2 = end;
int k = start;
merge_sort(arr,reg,start1,end1);
merge_sort(arr,reg,start2,end2);
while (start1<=end1 && start2<=end2)
{
reg[k++] = arr[start1] > arr[start2] ? arr[start2++] : arr[start1++];
}
while (start1<=end1)
{
reg[k++] = arr[start1++];
}
while (start2<=end2)
{
reg[k++] = arr[start2++];
}
for (int i = start; i <= end; ++i)
{
arr[i] = reg[i];
}
}
void countingSort(int arr[],int n)
{
int max = 0;
for (int i = 0; i < n; ++i)
{
if(max<arr[i])
{
max = arr[i];
}
}
int length = max + 1;
int count[length] = {0};
for (int i = 0; i < n; ++i)
{
count[arr[i]]++;
}
int len = sizeof (count)/sizeof (*count);
int k = 0;
for (int i = 0; i < len; ++i)
{
while (count[i]!=0)
{
arr[k++] = i;
count[i]--;
}
}
}
int main()
{
int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 };
int n = sizeof (arr)/sizeof (*arr);
int reg[n];
countingSort(arr,n);
for (int i = 0; i < n; ++i)
{
if (i != n - 1)
{
::printf("%lld ", arr[i]);
}
else
{
::printf("%lld ", arr[i]);
}
}
}
每一个优秀的人的背后都有一段沉默的时光,那是付出很多努力却不一定有结果的日子,我们把它叫做扎根。