1.冒泡排序,2.选择排序,3.快速排序,4.插入排序
几种常见的排序方式,速度是快排 >插入> 冒泡> 选择
例子都是从小到大排序
冒泡排序
int main()
{
int ar[11];
int i;
srand(time(NULL));//伪随机数种子
for(i = 0;i < 11;i++)
ar[i] = rand()%100;//获取随机数
int a,b;
//排序
for(a=0;a<10;a++)
{
for(b=0;b<10-a;b++)
{
if(ar[b]>ar[b+1])
{
//交换
ar[b+1]=ar[b+1]+ar[b];
ar[b]=ar[b+1]-ar[b];
ar[b+1]=ar[b+1]-ar[b];
}
}
}
//打印
for(i=0;i<10;i++)
{
printf("%d ",ar[i]);
}
printf("\n");
return 0;
}
选择排序
int main()
{
int buf[10];
int i;
srand(time(NULL));
for(i=0;i<10;i++)
buf[i]=rand()%100;
int j,k;
for(j=0;j<9;j++)
{
for(k=j+1;k<10;k++)
{
if(buf[j]>buf[k])
{
buf[k]=buf[k]+buf[j];
buf[j]=buf[k]-buf[j];
buf[k]=buf[k]-buf[j];
}
}
}
for(i=0;i<10;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
return 0;
}
快速排序
void sort(int *a, int left, int right)
{
if(left >= right)
{
return ;
}
int i = left;
int j = right;
int key = a[left];
while(i < j)
{
while(i < j && key <= a[j])//后一个判断决定顺序
{
j--;
}
a[i] = a[j];
while(i < j && key >= a[i])
{
i++;
}
a[j] = a[i];
}
a[i] = key;
sort(a, left, i - 1);//递归调用
sort(a, i + 1, right);
}
int main()
{
int buf[10];
int i=0,j=9;
srand(time(NULL));
for(j=0;j<10;j++)
buf[j]=rand()%100;
sort(buf,0,9);
for(i=0;i<10;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
插入排序
int main()
{
int R[10];
int i,j;
srand(time(NULL));
for(j=0;j<10;j++)
R[j]=rand()%100;
int temp;
for(i=1;i<10;i++)
{
if(R[i]<R[i-1])
{
temp=R[i];
j=i-1;
do
{
R[j+1]=R[j];
j--;
}
while(temp<R[j]);
if(j != i-1)
R[j+1]=temp;
}
}
for(i=0;i<10;i++)
{
printf("%d ",R[i]);
}
printf("\n");
}
网友评论