#include<iostream>usingnamespace std;voidswap(int arr[],int a,int b){int temp = arr[a];
arr[a]= arr[b];
arr[b]= temp;}voidhepify(int a[],int n,int i){if(i > n)return;int left =2* i+1;int right =2* i +2;int max=i;if(a[left]> a[max]&& left < n){
max = left;}if(a[right]> a[max]&& right < n){
max = right;}if(max != i){swap(a,i,max);hepify(a, n, max);}}voidbuidlheap(int a[],int n){int len = n -1;int begin =(len-1)/2;for(int i = begin; i >=0; i--){hepify(a, n, i);}}voidduisort(int a[],int n){buidlheap(a, n);int i;for(i = n -1; i >=0; i--){swap(a, i,0);hepify(a, i,0);}}intmain(){int a[9]={9,8,7,6,5,4,3,2,1};int temp[9];duisort(a,9);for(int i =0; i <9; i++){
cout << a[i]<<" ";}return0;}
八、计数排序
#include<iostream>usingnamespace std;voidjishusort(int a[],int len){int max=a[0];int min=a[0];for(int i =1; i < len; i++){if(a[i]> max)max = a[i];if(a[i]< min)min = a[i];}int l = max - min +1;int* temp =newint[l]{0};for(int i =0; i < len; i++){
temp[a[i]-min]++;}int sum =0;for(int i =0; i < l; i++){
sum += temp[i];
temp[i]=sum;}int* fi =newint[len]{0};for(int i = len-1; i >=0; i--){
fi[temp[a[i]- min]-1]= a[i];
temp[a[i]- min]--;}for(int i =0; i <11; i++){
cout << fi[i]<<" ";}}intmain(){int data[]={1,3,5,7,9,11,13,15,17,19,21};jishusort(data,11);return0;}
九、基数排序
#include<iostream>usingnamespace std;intmaxbit(int data[],int n){int d =1;int p =10;for(int i =0; i < n;++i){while(data[i]>= p){
p *=10;++d;}}return d;}voidradsort(int data[],int n){int d =maxbit(data, n);int* temp =newint[n];int* count =newint[10];int i, j, k;int radix =1;for(int i =1; i <= d; i++)//总共排序d次{for(j =0; j <10; j++)
count[j]=0;//每次分配前清空计数器for(j =0; j < n; j++){
k =(data[j]/ radix)%10;//统计每个桶中的记录数
count[k]++;}for(j =1; j <10; j++)
count[j]= count[j -1]+ count[j];//将tmp中的位置依次分配给每个桶for(j = n -1; j >=0; j--){
k =(data[j]/ radix)%10;
temp[count[k]-1]= data[j];
count[k]--;}for(j =0; j < n; j++)//将临时数组的内容复制到data中
data[j]= temp[j];
radix *=10;}}intmain(){int data[]={1,7,3,5,9,11,13,15,17,19,21};radsort(data,11);for(int i =0; i <11; i++){
cout << data[i]<<" ";}return0;}
一、快速排序#include<iostream>#include<string>using namespace std;void qiucksort(string &s,int begin,int end){ if (begin > end)return; int tmp = s[begin];//基准 int i = begin;//左 int j = end;//右 while (i != j) { while (s[j] >=