插入排序,選擇排序,冒泡排序,歸并排序(c語言實(shí)現(xiàn))
今天復(fù)習(xí)了下一些常見的排序算法,并用c語言實(shí)現(xiàn)了下。代碼如下:#include<stdio.h>
#include<stdlib.h>
#define MAX 65536 /*用于歸并排序中的哨兵*/
/*簡單插入排序,時(shí)間復(fù)雜度為o(n2),穩(wěn)定排序,適合已經(jīng)排好序的*/
void insertSort(int arr[],int len)
{
int i,j;
int key;
for(i=1;i<len;i++)
{
key=arr[i];
for(j=i-1;j>=0;j--)
{
if(arr[j]>key)
arr[j+1]=arr[j];
else
break;
}
arr[j+1]=key;
}
}
/*選擇排序,時(shí)間復(fù)雜度為o(n2),不穩(wěn)定排序,適合規(guī)模比較小的*/
void selectSort(int arr[],int len)
{
int i,j,temp;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
/*冒泡排序,時(shí)間復(fù)雜度為o(n2),穩(wěn)定排序,適合規(guī)模比較小的*/
void bubbleSort(int arr[],int len)
{
int i,j,temp;
for(i=0;i<len;i++)
{
for(j=0;j<len-i-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
/*合并(歸并)排序,時(shí)間復(fù)雜度為o(nlogn),穩(wěn)定排序,適合規(guī)模比較大的排序*/
void merge(int arr[],int p,int q,int r)
{
int *A,*B;
int n1,n2,i,j,k;
n1=q-p+1;
n2=r-q;
if((A=(int*)malloc((n1+1)*sizeof(int)))==NULL)
{
perror("malloc error");
exit(1);
}
if((B=(int*)malloc((n2+1)*sizeof(int)))==NULL)
{
perror("malloc error");
exit(1);
}
for(i=0;i<n1;i++)
{
A[i]=arr[p+i];
}
A[i]=MAX;
for(i=0;i<n2;i++)
{
B[i]=arr[q+i+1];
}
B[i]=MAX;
i=0;j=0;
for(k=p;k<=r;k++)
{
if(A[i]>B[j])
{
arr[k]=B[j];
j++;
}else{
arr[k]=A[i];
i++;
}
}
}
void mergeSort(int arr[],int begin,int end)
{
int mid;
if(begin<end)
{
mid=(begin+end)/2;
mergeSort(arr,begin,mid);
mergeSort(arr,mid+1,end);
merge(arr,begin,mid,end);
}
}
int main()
{
int a[8]={5,2,4,7,1,3,2,6};
int b[8]={5,2,4,7,1,3,2,6};
int c[8]={5,2,4,7,1,3,2,6};
int d[8]={5,2,4,7,1,3,2,6};
int i;
/*測試插入排序*/
insertSort(a,8);
printf("after 插入排序\n");
for(i=0;i<8;i++)
{
printf("%d ",a[i]);
}
printf("\n");
/*測試選擇排序*/
selectSort(b,8);
printf("after 選擇排序\n");
for(i=0;i<8;i++)
{
printf("%d ",b[i]);
}
printf("\n");
/*測試冒泡排序*/
bubbleSort(c,8);
printf("after 冒泡排序\n");
for(i=0;i<8;i++)
{
printf("%d ",c[i]);
}
printf("\n");
/*測試歸并排序*/
mergeSort(d,0,7);
printf("after 歸并排序\n");
for(i=0;i<8;i++)
{
printf("%d ",d[i]);
}
printf("\n");
}
posted on 2011-03-15 16:15 周強(qiáng) 閱讀(5336) 評(píng)論(0) 編輯 收藏 引用 所屬分類: 算法