#include<stdio.h>
int Compare(int a,int b)//用于控制升序或降序(改变不等号方向)
{
if(a<=b)return 1;
else return 0;
}
void Swap(int *a,int *b)
{
int temp=*a;
*a=*b;
*b=temp;
}
//冒泡排序
void BubbleSort(int *a,int len)
{
int i,j,flag;
for(i=0;i<len-1;i++)
{
flag=1;
for(j=0;j<len-1-i;j++)
{
if(Compare(a[j],a[j+1]))Swap(&a[j],&a[j+1]);
flag=0;
}
if(flag)break;//flag==1说明上一轮没有交换数字,数组已经有序,可以结束冒泡排序
}
}
//选择排序
void SelectSort(int *a,int len)
{
int index,i,j;
for(i=0;i<len;i++)
{
index=i;
for(j=i;j<len;j++)
{
if(Compare(a[index],a[j]))index=j;
}
Swap(&a[index],&a[i]);
}
}
//交换排序
void SwapSort(int *a,int len)
{
int i,j;
for(i=0;i<len;i++)
{
for(j=i+1;j<len;j++)
{
if(Compare(a[i],a[j]))Swap(&a[j],&a[i]);
}
}
}
//快速排序
void QuickSort(int *a,int start,int end)//注意下标范围
{
if(start>end)return;//数组已经排序完成,结束递归
int left=start,right=end;
int temp=a[left];
while(left!=right)//left和right碰头时结束循环
{
//以下两个while循环在a[right]或a[left]==temp时要继续进行,否则会死循环
while(Compare(a[right],temp)&&right>left)right--;
while(Compare(temp,a[left])&&right>left)left++;
if(right>left)
{
Swap(&a[left],&a[right]);
}
}
//将原数组第一个数放入中间特定位置,使数组分为两部分
a[start]=a[left];
a[left]=temp;
//递归 对左右两个小区间进行快速排序
QuickSort(a,start,left-1);
QuickSort(a,left+1,end);
}
int main()
{
int a[6]={1,7,6,2,1,5},i;
SelectSort(a,6);
for(i=0;i<6;i++)
{
printf("%d ",a[i]);
}
return 0;
}
几种排序算法
最新推荐文章于 2024-09-27 16:33:15 发布