内部排序

本文详细介绍了十种经典的排序算法,包括直接插入排序、折半插入排序、2路插入排序、希尔排序、快速排序、简单选择排序、树形选择排序、堆排序、归并排序、多关键字排序和链式基数排序。每种算法都提供了实现代码示例,便于读者理解其工作原理。

1、所有排序类型

直接插入排序  折半插入排序  2路插入排序  希尔排序  快速排序  简单选择排序  树形选择排序  堆排序  归并排序  多关键字排序  链式基数排序

2、直接插入排序

//begin

  for (int i = 1; i < 10; i++) {

    int temp = a[i];

    for(int j = i-1; j>=0; j--){

      if(a[j] > temp){  //将大于a[i]的数往后移动,并且记录将要插入的位置,j+1为要插入的位置

        a[j+1] = a[j];

        if(j == 0){  //如果j == 0,直接插入a[i]的值

          a[j] = temp;

          break;

        }

      }

      else{  //插入a[i]的值

        a[j+1] = temp;

        break;

      }

    }

  }

//end

3、折半插入排序

//begin

  for (int i = 1; i < 10; i++) {

    int temp = a[i];

    int low = 0, high = i - 1, m;

    while (low <= high) {  //折半查找到位置,为high+1

      m = (low + high) / 2;

      if (temp > a[m])

        low = m + 1;

      else

        high = m - 1;

    }

    for (int j = i - 1; j >= high + 1; j--) {  //将数据后移

      a[j + 1] = a[j];

    }

    a[high + 1] = temp;  //插入未排序的数据

  }

//end

4、2路插入排序

//begin

  int dq[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

  int dh[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

  dq[0] = a[0]; dh[0] = a[0];

  int dqn = 0, dhn = 0;

  for (int i = 1; i < 10; i++) {

    int temp = a[i];

    if (a[i] < a[0]) {

      int j = dqn;

      while (dq[j] != 0 && j>=0) {

        if (temp < dq[j]) {

          dq[j + 1] = dq[j];

          j--;

        }

        else

          break;

      }

      dq[j + 1] = temp;

      dqn++;

    }

    else {

      int j = dhn;

      while (dh[j] != 0 && j >= 0) {

        if (temp < dh[j]) {

          dh[j + 1] = dh[j];

          j--;

        }

        else

          break;

      }

      dh[j + 1] = temp;

      dhn++;

    }  

  }

//end

5、希尔排序

6、快速排序

7、简单选择排序

8、树形选择排序

9、堆排序

10、归并排序

11、多关键字排序

12、链式基数排序

13、10种排序的比较

转载于:https://www.cnblogs.com/lijia-1998/p/9231883.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值