排序
读入
void input()
{
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
return;
}
输出
void output()
{
for(int i = 0; i < n; i++)
cout << a[i] << " ";
return;
}
选择排序
void SelectionSort()
{
for(int i = 0; i < n; i++)
{
int min = i;
for(int j = i + 1; j < n; j++)
if(a[j] < a[min])
min = j;
swap(a[i], a[min]);
}
return;
}
冒泡排序
void BubbleSort()
{
for(int i = 0; i < n - 1; i++)
for(int j = 0; j < n - i - 1; j++)
if(a[j] > a[j + 1])
swap(a[j], a[j + 1]);
return;
}
插入排序
void InsertSort()
{
for(int i = 1; i < n; i++)
{
int j = 0;
while(a[j] <= a[i] && j < i)
j++;
int temp = a[i];
for(int k = i; k > j; k--)
a[k] = a[k - 1];
a[j] = temp;
}
return ;
}
归并排序
void MergeSort(int l, int r)
{
if(l == r)
return ;
MergeSort(l, (l + r) / 2);
MergeSort((l + r) / 2 + 1, r);
int i = l, j = (l + r) / 2 + 1, cnt = l;
int b[n];
while(i <= (l + r) / 2 && j <= r)
{
if(a[i] < a[j])
b[cnt++] = a[i++];
else
b[cnt++] = a[j++];
}
while(i <= (l + r) / 2)
b[cnt++] = a[i++];
while(j <= r)
b[cnt++] = a[j++];
for(; l <= r; l++)
a[l] = b[l];
}
快速排序
sort(a, a + n, cmp)
计数排序
void CountingSort()
{
int b[MAXN];
memset(b, 0, sizeof(b));
for(int i = 0; i < n; i++)
b[a[i]]++;
int cnt = 0;
for(int i = 0; i < MAXN; i++)
while(b[i])
{
a[cnt++] = i;
b[i]--;
}
return ;
}
桶排序
vector<vector<int> > b;
void BucketSort()
{
int k;
cin >> k;
for(int i = 0; i < MAXN / k + 1; i++)
b.push_back(vector<int>());
for(int i = 0; i < n; i++)
b[a[i] / k].push_back(a[i]);
int cnt = 0;
for(int i = 0; i < MAXN / k + 1; i++)
sort(b[i].begin(), b[i].end());
for(int i = 0; i < MAXN / k + 1; i++)
for(int j = 0; j < b[i].size(); j++)
a[cnt++] = b[i][j];
return ;
}