几种常见的排序

1、快速排序:
/*
快速排序语言描述:
1、如无序数组[3 2 4 1 5 9]
a),先把第一项[3]取出来,
用[3]依次与其余项进行比较,
如果比[3]小就放[3]前边,2 1 都比[3]小,所以全部放到[3]前边
如果比[3]大就放[3]后边,4 5 9比[3]大,放到[3]后边
一趟排完后变成下边这样:
排序前 3 2 4 1 5 9
排序后 2 1 3 4 5 9
b),对前半拉[2 1]继续进行快速排序
重复步骤a)【取第一项 2与其余项比较】后变成下边这样:
排序前 2 1
排序后 1 2
前半拉排序完成。
c),对后半拉[4 5 9]继续进行快速排序
重复步骤a)【取第一项 4与其余项比较】后变成下边这样:
排序前 4 5 9
排序后 4 5 9
d),对后半拉[5 9]继续进行快速排序
重复步骤a)【取第一项 5与其余项比较】后变成下边这样:
排序前 5 9
排序后 5 9
d在这个例子中可以忽略,但是当后面的数字较小时就得必不可少的循环继续下去。
前半拉排序完成。
总的排序也完成:
排序前:[3 2 4 1 5 9]
排序后:[1 2 3 4 5 9]
*/
#include <stdio.h>
#include <stdlib.h> 


//交换数
void swap(int *x,int *y)
{
   int temp;
   temp = *x;
   *x = *y;
   *y = temp;
}
//算数组折半的个数
int choose_pivot(int i,int j )
{
   return((i+j) /2);
}
void quicksort(int list[],int m,int n)
{
   int key,i,j,k;
   if( m < n)
   {
      k = choose_pivot(m,n);
      swap(&list[m],&list[k]);
      key = list[m];
      i = m+1;
      j = n;
      while(i <= j)
      {
         while((i <= n) && (list[i] <= key))
                i++;
         while((j >= m) && (list[j] > key))
                j--;
         if( i < j)
                swap(&list[i],&list[j]);
      }
     // 交换两个元素的位置
      swap(&list[m],&list[j]);
     // 递归地对较小的数据序列进行排序
      quicksort(list,m,j-1);
      quicksort(list,j+1,n);
   }
}
void printlist(int list[],int n)
{
   int i;
   for(i=0;i<n;i++)
      printf("%d\t",list[i]);
}
void main()
{
int list[6]={3, 2, 4, 1, 5, 9};
printf("进行排序之前的序列:\n");
        printlist(list,6);
 
 
        printf("\n");
      quicksort(list,0,6);
      printf("使用快速排序算法进行排序之后的序列:\n");
       printlist(list,6);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lm_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值