一、基数排序
#ifndef sort__h
#define sort__h
#include <cstdio>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
void print_array(int *arr, int n);
int* sort_array(int *arr, int n);
#endif
void print_array(int *arr, int n)
{
if(n==0){
printf("ERROR: Array length is ZERO\n");
return;
}
printf("%d", arr[0]);
for (int i=1; i<n; i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
int* sort_array(int *arr, int n)
{
int a[10][n]={0};
int b[n]={0};
int i,j,k;
int c;
int d;
c=1;
while(c<= 100)
{
for(i=0;i<n;i++)
{
k = (arr[i]/c) % 10;
a[k][b[k]] = arr[i];
b[k]++;
}
d=0;
for(i=0;i<n;i++)
{
if(b[i] != 0)
{
for(j=0;j<b[i];j++)
{
arr[d] =a[i][j];
d++;
}
b[i] = 0;
}
}
c *= 10;
}
return arr;
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr;
arr = (int*)malloc(sizeof(int)*n);
for (int i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
arr = sort_array(arr, n);
print_array(arr, n);
return 0;
}
二、桶排序
#ifndef sort__h
#define sort__h
#include <cstdio>
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
void print_array(int *arr, int n);
int* sort_array(int *arr, int n);
#endif
void print_array(int *arr, int n)
{
if(n==0){
printf("ERROR: Array length is ZERO\n");
return;
}
printf("%d", arr[0]);
for (int i=1; i<n; i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
int* sort_array(int *arr, int n)
{
int max = arr[0];
for(int i = 1; i < n; i++)
{
if(arr[i] > max)
max = arr[i];
}
int a = max + 1;
int *b=(int *)malloc(sizeof(int)*a);
int i, j;
for( i = 0; i < a; i++)
b[i] = 0;
for(i = 0; i < n; i++)
b[ arr[i] ]++;
for(i = 0, j = 0; i < a; i ++)
{
while( b[ i ] != 0)
{
arr[j ] = i;
j++;
b[i]--;
}
}
return arr;
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr;
arr = (int*)malloc(sizeof(int)*n);
for (int i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
arr = sort_array(arr, n);
print_array(arr, n);
return 0;
}
三、计数排序
#ifndef sort__h
#define sort__h
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
void print_array(int *arr, int n);
void sort_array(int *arr, int n);
#endif
void print_array(int *arr, int n)
{
if(n==0){
printf("ERROR: Array length is ZERO\n");
return;
}
printf("%d", arr[0]);
for (int i=1; i<n;i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
void sort_array(int *a, int n)
{
int max;
int j;
int num=0;
int k=0;
for(int i=0;i<n;i++){
if(max<a[i]){
max=a[i];
}
}
int *b=(int *)malloc(sizeof(int)*(max+1));
for(int i=0;i<max;i++){
b[i]=0;
}
for(int i=0;i<n;i++){
k=a[i];
b[k]++;
}
for(int m=0;m<=max;m++){
if(b[m]!=0){
printf("%d %d",m,b[m]);
printf("\n");
}
}
for(int i=0;i<=max;i++){
if(b[i]!=0)
num=num+b[i];
}
int *c=(int *)malloc(sizeof(int)*num);
for(int d=0;d<=max;d++){
if(b[d]!=0){
for(int l=0;l<b[d];l++){
c[j]=d;
j++;
}
}
}
print_array(c,num);
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr;
arr = (int*)malloc(sizeof(int)*n);
for (int i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
sort_array(arr, n);
return 0;
}
四、堆排序
#ifndef sort__h
#define sort__h
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
void print_array(int *arr, int n);
void adjustHeap(int *arr, int param1, int j);
int* heap_sort(int *arr, int n);
#endif
void print_array(int *arr, int n)
{
if(n==0){
printf("ERROR: Array length is ZERO\n");
return;
}
printf("%d", arr[0]);
for (int i=1; i<n; i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
void adjustHeap(int *a, int n, int h)
{
int i,j,flag;
int temp;
i=h;
j=2*i+1;
temp=a[i];
flag=0;
while(j<n&&flag!=1){
if(j<n-1&&a[j]<a[j+1])j++;
if(temp>a[j])
flag=1;
else{
a[i]=a[j];
i=j;
j=2*i+1;
}
}
a[i]=temp;
}
int* heap_sort(int *a, int n)
{
int i;
int temp;
int j;
for(j=(n-2)/2;j>=0;j--)
adjustHeap(a,n,j);
for(i=n-1;i>0;i--){
temp=a[0];
a[0]=a[i];
a[i]=temp;
adjustHeap(a,i,0);
}
return a;
}
int main(int argc, const char * argv[]) {
int n;
scanf("%d", &n);
int *arr;
arr = (int*)malloc(sizeof(int)*n);
for (int i=0; i<n; i++)
{
scanf("%d", &arr[i]);
}
arr = heap_sort(arr, n);
print_array(arr, n);
return 0;
}