排序

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]

你可能感兴趣的:(排序)