#include <cstdio>
#include <cstdlib>
#include <cstring>
static void Find_max_min(int* array, int num, int* max, int* min)
{
*max = *min = array[0];
while (--num)
{
*max = array[num] > *max ? array[num] : *max;
*min = array[num] < *min ? array[num] : *min;
}
}
void Count_Sort(int* Array, int num)
{
int max, min;
Find_max_min(Array, num, &max, &min);
int offset = min;
int* SortArrayForCount = (int*)malloc(sizeof(int) * (max - min + 1));
memset(SortArrayForCount, 0, sizeof(int) * (max - min + 1));
while (num--)
{
SortArrayForCount[Array[num] - offset]++;
}
num = 0;
for (int i = 0; i < max - min + 1; i++)
{
for (int j = 0; j < SortArrayForCount[i]; j++)
{
Array[num++] = i + offset;
}
}
free(SortArrayForCount);
}
void Info_Array_Integer(int* array, size_t num)
{
printf("---------------------------\n");
for (int i = 0; i < num; i++)
{
printf("%d ", array[i]);
}
printf("\n---------------------------\n");
}
int arr[10] = {99, 91, 88, 101, 100, 95, 93, 87, 92, 91};
int main()
{
Info_Array_Integer(arr, 10);
Count_Sort(arr, 10);
Info_Array_Integer(arr, 10);
return 0;
}
计数排序 c语言
最新推荐文章于 2024-09-15 04:17:06 发布