一、冒泡排序、选择排序、插入排序
#include<stdio.h>
#include<stdlib.h>
//冒泡排序
//将大数“浮”到数列顶端
//比较相邻的两个数,如果第二个数小则交换位置。
void bubbleSort(int a[],int n)
{
int i,j,temp;
for(i=1;i<n;i++){//n-1次
for(j=0;j<n-1;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//选择排序
//在未排序的数列中找到最小元素,与第i个元素交换
void selectSort(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
//插入排序
//对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
void insertSort(int a[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++){
for(j=i+1;j>0;j--){
if(a[j-1]>a[j]){
temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
else break;
}
}
}
//qsort函数
int comp(const void *a ,const void *b){
return *(int*)a-*(int *)b;
}
int main()
{
int a[]={12,4,132,55,46,232,789,1,0,98,523,666};//随机数组
int n=sizeof(a)/sizeof(a[0]);//数组大小
// bubbleSort(a,n);
// selectSort(a,n);
// insertSort(a,n);
// qsort(a,n,sizeof(int),comp);
int i;
for( i=0;i<n;i++){
printf("%d",a[i]);
if(i!=n-1)printf(" ");
}
return 0;
}
二、归并排序
//归并排序
#include<stdio.h>
#include<stdlib.h>
typedef int ElementType;
//L坐起点位置,R右起点位置 ,RightEnd 右终点
void Merge(ElementType A[],ElementType TmpA[],int L,int R,int RightEnd)
{
//将A[L]-A[R-1]和A[R]-A[RightEnd】归并后才一个有序序列
int LeftEnd,NumElements,Tmp;
int i;
LeftEnd=R-1;
Tmp=L;//序列起点
NumElements=RightEnd-L+1;//总数
while(L<=LeftEnd&&R<=RightEnd){ //当左边和右边都还有元素时,比较元素大小
if(A[L]<=A[R])
TmpA[Tmp++]=A[L++];//将左边元素复制到TmpA
else TmpA[Tmp++]=A[R++];//将右边元素复制到TmpA
}
//左右两边有剩余
while(L<=LeftEnd)
TmpA[Tmp++]=A[L++];//直接复制左边元素
while(R<=RightEnd)
TmpA[Tmp++]=A[R++]; //直接复制右边元素
for(i=0;i<NumElements;i++,RightEnd--)
A[RightEnd]=TmpA[RightEnd];//将有序的Tmp[A]复制到A[]
}
//递归排序
void Msort(ElementType A[],ElementType TmpA[],int L,int RightEnd)
{
int Center;
if(L<RightEnd){
Center=(L+RightEnd)/2;
Msort(A,TmpA,L,Center);//递归解决左边
Msort(A,TmpA,Center+1,RightEnd);//递归解决右边
Merge(A,TmpA,L,Center+1,RightEnd);//合并两段有序序列
}
}
//归并排序
void MergeSort(ElementType A[],int N)
{
ElementType *TmpA;
TmpA=(ElementType *)malloc(sizeof(ElementType)*N);
if(TmpA!=NULL){
Msort(A,TmpA,0,N-1);
free(TmpA);
}
else printf("空间不足");
}
int main()
{
printf("请输入数据个数:");
int N,i;
ElementType A[10];
scanf("%d",&N);
printf("请输入%d个数据:",N);
for(i=0;i<N;i++)
scanf("%d",&A[i]);
MergeSort(A,N);
printf("归并排序:");
for(i=0;i<N;i++)
printf("%d ",A[i]);
return 0;
}
运行: