千奇百怪的排序算法

原创 2016年10月10日 11:01:02

PS:时间有限,先介绍2种


学号:16340182
数据科学与计算机学院


目录


一、插入排序

  • 排序思想
    插入排序运用的思想是逐渐扩大战果,即将原数列中的元素一个一个的插入到已经排好序的数列中,直至所有的数都插入到了有序数列中,这时,排序就完成了。

  • 排序方法
    1.新建一个数组,用于保存已排序好的数列(称为有序数列);
    2.从原数列中取出一个数,插入1有序数列中,使有序数列任然有序;
    3.重复步骤2,直至原数列中所有的数都插入到有序数列中.

  • C语言代码:

#include <stdio.h>   //这里为从小到大的排序
int a[100],b[100]; 
int InsertSort(int n){  //a为有序数组,b为原数组,n为原数组中的元素个数
    int i,j,k;    
    for(i=0;i<n;i++){
        j=0;
        while((b[i]>a[j])&&(j<i)) j++;    //找到元素b[i]的合适位置
        for(k=i;k>j;k--) a[k]=a[k-1];     //将有序数组中的元素后移
        a[j]=b[i];                        //将新元素插入有序数组中
    }
}

int main(){
}                                              //main自己脑补......

二、快速排序

  • 排序思想
    实践证明,快速排序是所有排序算法中最高效的一种。排序算法运用了分治的思想,先使列表中前半部分的数小于(或大于)后半部分的数,然后对列表的前半部分和后半部分分别排序,则整个列表都排序完毕了。

  • 排序方法
    1.选取一个基准数A0;(可以随机选取,一般选取序号在中间的数)
    2.设置两个变量i,j当做指针;
    3.i从0开始逐渐增大,直到A[i]>=A0
    4.j从最大开始逐渐减小,直到A[j]<=A0;
    5.交换A[i]和A[j];
    6.重复步骤3.4.5.,直到i>=j;
    7.之后对0到i的部分和i到最后一个数重复上面6个步骤,即对两个部分再分别进行快排.

  • C语言代码

    
    #include <stdio.h>
    
    int a[100];
    int QuickSort(int head,int tail){
     int i=head,j=tail,mid,c;
     if(head<tail){                              //这里一定要加一个判断函数是否执行的条件,否则会陷入死循环
        mid=a[(head+tail)/2];                   //取中间值
        while(i<j){
           while(a[i]<mid) i++;                //这里要注意不等号没有等于,否则运行可能出错
           while(a[j]>mid) j--;
           c=a[i];a[i]=a[j];a[j]=c;             //这里是交换a[i]与a[j]
        }
     QuickSort(head,i);
     QuickSort(i+1,tail);
     }
    }
    
    int main{
    }                                    //main还是自己脑补。。。

    PS:这个快排的代码不能解决带有重复数据的排序,若要使该代码可以对带有重复数据一组数值进行排序,应怎样修改呢?同学们自己可以想一想(ง •̀_•́)ง。。。。。(好吧我承认是我暂时还没想= =,等我想出来了会更新的。。。)

    快速排序的演示图片


  1. 插入的方法:只需将从原数列中取出的数从头开始与有序数列中的数对比,找到合适的位置后,有序数列中后面的数依次后移一位,该数插入合适位置即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。

nyist oj 540 奇怪的排序(水题)

奇怪的排序 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 最近,Dr. Kong 新设计一个机器人Bill.这台机器人很聪明,会做许多事情。惟独对自然数的理解与人类不...
  • u014253173
  • u014253173
  • 2014年08月10日 14:28
  • 1435

ACM气球膨胀问题C++实现

1.问题描述:给定一个矩形,在该矩形中有3个固定的点,以这3个点为中心的气球先后膨胀:膨胀时触碰到矩形的边或其他气球时则停止膨胀。编写程序求以何种顺序膨胀气球时,才能使气球的横切面面积之和为最大。 ...
  • cordova
  • cordova
  • 2016年03月11日 09:18
  • 1123

排序高级之交换排序_奇偶排序

奇偶排序,或奇偶换位排序,或砖排序,是一种相对简单的排序算法,最初发明用于有本地互连的并行计算。这是与冒泡排序特点类似的一种比较排序。 该算法中,通过比较数组中相邻的(奇-偶)位置数字对,如果该奇偶...
  • u012959829
  • u012959829
  • 2015年01月06日 12:05
  • 2955

归并排序算法

  • 2018年01月11日 18:14
  • 1KB
  • 下载

java 排序算法

  • 2018年01月11日 11:17
  • 18KB
  • 下载

中科大快速排序算法及优化实验报告

  • 2018年01月11日 10:14
  • 150KB
  • 下载

java排序算法总结

  • 2016年07月25日 17:35
  • 8KB
  • 下载

内部排序算法

  • 2017年05月10日 08:57
  • 239KB
  • 下载

Java各种排序算法

  • 2015年12月24日 14:41
  • 106KB
  • 下载

排序算法总结 实现 Demo (Java)

  • 2016年05月19日 17:53
  • 102KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:千奇百怪的排序算法
举报原因:
原因补充:

(最多只允许输入30个字)