如题。。
一、快速排序
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int a[10000];
int i,n;
cin>>n;
for(i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
for(i=0;i<n;i++){
cout<<" "<<a[i];
}
}
二、冒泡排序
void BubbleSort(int *a,int len){
int i,j,k,tmp;
for(i=0;i<len-1;i++){
for(j=len0-1;j>i;j--){
if(a[j-1]>a[j]){
tmp=a[j-1];
a[j-1]=a[j];
a[j]=tmp;
}
}
printf("第%d步的排序结果是:",i);
for(k=0;k<len;k++){
printf("%d",a[k]);
}
printf("\n");
}
}
三、选择排序
void SelectionSort(int *a,int len){
int i,j,k,h,tmp;
for(i=0;i<len-1;i++){
k=i;
for(j=i+1;j<len;j++){
if(a[j]<a[k])
k=j;
}
if(k!=i){
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
printf("第%d步排序结果是:",i);
for(h=0;h<len;h++){
printf("%d",a[h]);
}
printf("\n");
}
}
四、插入排序
void InsertionSort(int *a,int len){
int i,j,t,h;
for(i=0;i<len;i++){
t=a[i];
j=i-1;
while(j>=0;&&t<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=t;
printf("第%d的排序结果是:",i);
for(h=0;h<len;h++){
printf("%d",a[h]);
}
printf("\n");
}
}
五、Shell排序
void ShellSort(int *a;int len){
int i,j,h,r,tmp,x=0;
for(r=len/2;r>=1;r/=2){
for(i=r;i<len;i++){
tmp=a[i];
j=i-r;
while(j>=0&&tmp<a[j]){
a[j+r]=a[j];
j-=r;
}
a[j+r]=tmp;
}
x++;
printf("第%d步排序结果是:",i);
for(h=0;h<len;h++){
printf("%d",a[h]);
}
printf("\n");
}
}
六、堆排序
void HeapSort(int a[],int n){
int i,j,k,h,t;
for(i=n/2-1;i>=0;i--){
while(2*i+1<n){
j=2*i+1;
if((j+1)<n){
if(a[j]<a[j+1])
j++;
}
if(a[i]<a[j]){
t=a[i];
a[i]=a[j];
a[j]=t;
i=j;
}
else{
break;
}
}
}
printf("原数据构成的堆:");
for(h=0;h<n;h++){
printf("%d",a[h]);
}
printf("\n");
for(i=n-1;i>0;i--){
t=a[0];
a[i]=t;
k=0;
while(2*k+1<i){
j=2*k+1;
if((j+1)<i){
if(a[j]<a[j+1]){
j++;
}
}
if(a[k]<a[j]){
t=a[k];
a[k]=a[j];
a[j]=t;
k=j;
}
else{
break;
}
}
printf("第%d步的排序结果是:",n-i);
for(h=0;h<n;h++){
printf("%d",a[h]);
}
printf("\n");
}
}
七、合并排序
void MergeOne(int a[],int b[],int n,int len){
int i,j,k,s=0,e;
while(s+len<n){
e=s+2*len-1;
if(e>=n){
e=n-1;
}
k-s;
i=s;
j=s+len;
while(i<s+len&&j<=e){
if(a[i]<=a[j]){
b[k++]=a[i++];
}
else{
b[k++]=a[j++];
}
}
while(i<s+len){
b[k++]=a[i++];
}
while(j<=e){
b[k++]=a[j++];
}
s=e+1;
}
if(s<n){
for(;s<n;s++){
b[s]=a[s];
}
}
}
void MergeSort(int a[],int n){
int *p;
int h,count=0,len=1,f=0;
if(!(p=(int *)malloc(sizeof(int)*n))){
printf("内存分配失败!\n");
exit(0);
}
while(len<n){
if(f==1){
MergeOne(p,a,n,len);
}
else{
MergeOne(a,p,n,len);
}
len=len*2;
f=l-f;
count++;
printf("第%d步的排序结果是:",count);
for(h=0;h<SIZE;h++){
printf("%d",a[h]);
}
printf("\n");
}
if(f){
for(h=0;h<n;h++){
a[h]=p[h];
}
}
free(p);
}
附带各大排序算法的复杂度
排序算法 | 速度 | 最坏 |
---|---|---|
选择 | n^2 | n^2 |
冒泡 | n^2 | n^2 |
快速 | nlogn | n^2 |
堆 | nlogn | nlogn |
插入 | n^2 | n^2 |
shell | n^3/2 | n^2 |
合并 | nlogn | nlogn |
最后弱弱的说一句,小谁最喜欢的就是快速排序,毕竟C++万能头文件下的快排代码只有几行,嘿嘿嘿,日常偷懒ing,不过如果遇到一些不允许用万能头的情况,那就没办法了。。