归并排序
#include <bits/stdc++.h>
using namespace std;
void Merge(int nums[], int temp[], int high, int low, int mid);
void MergeSort(int nums[], int temp[], int low, int high)
{
if (low < high)
{
int mid = (high + low) / 2;
MergeSort(nums, temp, low, mid);
MergeSort(nums, temp, mid + 1, high);
Merge(nums, temp, high, low, mid);
}
}
void Merge(int nums[], int temp[], int high, int low, int mid)
{
for (int i = low; i <= high; i++)
{
temp[i] = nums[i];
}
int i, j, k;
for (i = low, j = mid + 1, k = i; i < mid + 1 && j <= high; k++)
{
if (temp[i] < temp[j]) nums[k] = temp[i++];
else nums[k] = temp[j++];
}
while (i < mid + 1) nums[k++] = temp[i++];
while (j <= high) nums[k++] = temp[j++];
}
int main()
{
int data, nums[1000], temp[1000];
int len = 0;
while (cin >> data)
{
nums[len] = data;
len++;
}
MergeSort(nums, temp, 0, len - 1);
for (int i = 0; i < len; i++)
{
cout << nums[i] << " ";
}
}
基数排序
#include <bits/stdc++.h>
using namespace std;
int temp[100], bucket[10];
int MaxBit(int nums[],int len)
{
int maximum = nums[0];
for (int i = 1; i < len; i++)
{
if (maximum < nums[i]) maximum = nums[i];
}
int d = 0;
while (maximum > 0)
{
maximum /= 10;
d++;
}
return d;
}
void RadixSort(int nums[], int len)
{
int n = MaxBit(nums, len);
int radix = 1;
int k;
for (int i = 1; i <= n; i++)
{
fill(bucket, bucket + 10, 0);
for (int j = 0; j < len; j++)
{
k = (nums[j] / radix) % 10;
bucket[k]++;
}
for (int j = 1; j < 10; j++)
{
bucket[j] += bucket[j - 1];
}
for (int j = len - 1; j >= 0; j--)
{
k = (nums[j] / radix) % 10;
temp[bucket[k] - 1] = nums[j];
bucket[k]--;
}
for (int j = 0; j < len; j++)
{
nums[j] = temp[j];
}
radix *= 10;
}
}
int main()
{
int data, nums[1000];
int len = 0;
while (cin >> data)
{
nums[len] = data;
len++;
}
RadixSort(nums, len);
for (int i = 0; i < len; i++)
{
cout << nums[i] << " ";
}
}