直插排序
void insertsort(int *a, int n)//升序
{
for(int i = 1, j; i < n; i++)
{
int tem = a[i];
for(j = i - 1; j >= 0; j--)
if(a[j] > tem)
a[j + 1] = a[j];
else
break;
a[j + 1] = tem;
//print(a, n);
}
}
希尔排序
void shellsort(int *a, int n)//降序
{
for(int gap = n / 2; gap >= 1; gap /= 2)
{
for(int i = gap, j; i < n; i++)
{
int tem = a[i];
for(j = i - gap; j >= 0; j -= gap)
if(a[j] < tem)
a[j + gap] = a[j];
else
break;
a[j + gap] = tem;
}//print(a, n);
}
}
冒泡排序
void bubblesort(int *a, int n)
{
int count = 0;//记录交换次数
for(int i = 1; i < n; i++)
for(int j = 0; j < n - i; j++)
if(a[j] > a[j + 1])
swap(a[j], a[j + 1]), count ++;
//cout << count << endl;
}
快速排序
void quicksort(int *a, int l ,int r, int n)
{
if(l >= r)
return;
int low = l, high = r;
int tem = a[l];
while(low < high)
{
for(; low < high && a[high] >= tem; high--); a[low] = a[high];
for(; low < high && a[low] <= tem; low++); a[high] = a[low];
}
a[low] = tem;
//print(a, n);
quicksort(a, l, low - 1, n);
quicksort(a, low + 1, r, n);
}
堆排序
void heapadjuest(int *a, int i, int size)//小顶堆
{
int t = i;
while(1)
{
int u = t;
int l = u * 2 + 1, r = u * 2 + 2;
if(l < size && a[l] < a[u])
u = l;
if(r < size && a[r] < a[u])
u = r;
if(u == t)
break;
swap(a[t], a[u]);
t = u;
}
}
void heapsort(int *a, int n)
{
for(int i = n / 2; i >= 0; i--)
heapadjuest(a, i, n);
for(int size = n - 1; size > 0; size--)
{
swap(a[0], a[size]);
heapadjuest(a, 0, size);
}
}
渣渣版归并排序
void merge(string *a ,int l, int r, int size)
{
if(l + size > r)
return;
string tem[r - l + 1];
int i = l, j = l + size, mid = l + size;
int k = 0;
while(i < mid && j <= r)
{
if(a[i] < a[j])
tem[k++] = a[j++];
else
tem[k++] = a[i++];
}
while(i < mid) tem[k++] = a[i++];
while(j <= r) tem[k++] = a[j++];
for(int i = 0, j = l; j <= r; j++, i++)
a[j] = tem[i];
}
void mergesort(string *a, int n)//排的是字符串, 降序
{
int size = 1;
while(size < n)
{
for(int i = 0; i < n; i += 2 * size)
merge(a, i, i + size* 2 - 1 >= n - 1 ? n - 1 : i + size* 2 - 1, size);
size *=2;
for(int i = 0; i < n; i++)
{
if(i)
cout << ' ';
cout << a[i];
}
cout << endl;
}
}
基数排序
void radixsort(int *a, int n)
{
int maxn = -0x3f3f3f3f;
int tem[n];
for(int i = 0; i < n; i++)
maxn = max(a[i], maxn), tem[i] = a[i];;
int bit = 0;
while(maxn) bit++, maxn /= 10;
queue<int> q[10];
queue<int> all;
for(int i = 0; i < bit; i++)
{
for(int j = 0; j < n; j++)
{
for(int k = 0; k < i; k++)
tem[j] /= 10;
tem[j] %= 10;
q[tem[j]].push(a[j]);
}
for(int j = 0; j < 10; j++)
{
cout << j <<":";
if(q[j].empty())
cout << "NULL";
else
{
while(!q[j].empty())
{
all.push(q[j].front());
cout << "->" << q[j].front();
q[j].pop();
}
cout << "->^";
}
cout << endl;
}
for(int j = 0; j < n; j++)
tem[j] = a[j] = all.front(), all.pop();
print(a, n);
}
cout << endl;
}
套套套套套套模板
#include <iostream>
#include <queue>
using namespace std;
void print(int *a, int n)
{
for(int i = 0; i < n; i++)
{
if(i)
cout << ' ';
cout << a[i];
}
cout << endl;
}
void insertsort(int *a, int n)
{
for(int i = 1, j; i < n; i++)
{
int tem = a[i];
for(j = i - 1; j >= 0; j--)
if(a[j] > tem)
a[j + 1] = a[j];
else
break;
a[j + 1] = tem;
//print(a, n);
}
}
void shellsort(int *a, int n)
{
for(int gap = n / 2; gap >= 1; gap /= 2)
{
for(int i = gap, j; i < n; i++)
{
int tem = a[i];
for(j = i - gap; j >= 0; j -= gap)
if(a[j] < tem)
a[j + gap] = a[j];
else
break;
a[j + gap] = tem;
}print(a, n);
}
}
void bubblesort(int *a, int n)
{
int count = 0;
for(int i = 1; i < n; i++)
for(int j = 0; j < n - i; j++)
if(a[j] > a[j + 1])
swap(a[j], a[j + 1]), count ++;
cout << count << endl;
}
void quicksort(int *a, int l ,int r, int n)
{
if(l >= r)
return;
int low = l, high = r;
int tem = a[l];
while(low < high)
{
for(; low < high && a[high] >= tem; high--); a[low] = a[high];
for(; low < high && a[low] <= tem; low++); a[high] = a[low];
}
a[low] = tem;
print(a, n);
quicksort(a, l, low - 1, n);
quicksort(a, low + 1, r, n);
}
void heapadjuest(int *a, int i, int size)//小顶堆
{
int t = i;
while(1)
{
int u = t;
int l = u * 2 + 1, r = u * 2 + 2;
if(l < size && a[l] < a[u])
u = l;
if(r < size && a[r] < a[u])
u = r;
if(u == t)
break;
swap(a[t], a[u]);
t = u;
}
}
void heapsort(int *a, int n)
{
for(int i = n / 2; i >= 0; i--)
heapadjuest(a, i, n);
cout << n << ' ';
print(a, n);
for(int size = n - 1; size > 0; size--)
{
swap(a[0], a[size]);
heapadjuest(a, 0, size);
cout << n << ' ';
print(a, n);
}
}
void merge(string *a ,int l, int r, int size)
{
if(l + size > r)
return;
string tem[r - l + 1];
int i = l, j = l + size, mid = l + size;
int k = 0;
while(i < mid && j <= r)
{
if(a[i] < a[j])
tem[k++] = a[j++];
else
tem[k++] = a[i++];
}
while(i < mid) tem[k++] = a[i++];
while(j <= r) tem[k++] = a[j++];
for(int i = 0, j = l; j <= r; j++, i++)
a[j] = tem[i];
}
void mergesort(string *a, int n)
{
int size = 1;
while(size < n)
{
for(int i = 0; i < n; i += 2 * size)
merge(a, i, i + size* 2 - 1 >= n - 1 ? n - 1 : i + size* 2 - 1, size);
size *=2;
for(int i = 0; i < n; i++)
{
if(i)
cout << ' ';
cout << a[i];
}
cout << endl;
}
}
void radixsort(int *a, int n)
{
int maxn = -0x3f3f3f3f;
int tem[n];
for(int i = 0; i < n; i++)
maxn = max(a[i], maxn), tem[i] = a[i];;
int bit = 0;
while(maxn) bit++, maxn /= 10;
queue<int> q[10];
queue<int> all;
for(int i = 0; i < bit; i++)
{
for(int j = 0; j < n; j++)
{
for(int k = 0; k < i; k++)
tem[j] /= 10;
tem[j] %= 10;
q[tem[j]].push(a[j]);
}
for(int j = 0; j < 10; j++)
{
cout << j <<":";
if(q[j].empty())
cout << "NULL";
else
{
while(!q[j].empty())
{
all.push(q[j].front());
cout << "->" << q[j].front();
q[j].pop();
}
cout << "->^";
}
cout << endl;
}
for(int j = 0; j < n; j++)
tem[j] = a[j] = all.front(), all.pop();
print(a, n);
}
cout << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
{
int n;
cin >> n;
int a[n];
for(int i = 0; i < n; i++)
cin >> a[i];
radixsort(a, n);
// cout << endl;
//}
}
}
来源:CSDN
作者:靓仔彬
链接:https://blog.csdn.net/weixin_43792486/article/details/103646115