Educoder头歌数据结构-十大经典排序算法

本文详细介绍了冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序以及基数排序等十个常见数据结构排序算法的实现过程,通过代码实例展示每种算法的工作原理和操作步骤,并附带关键操作的输出。

数据结构-十大经典排序算法

"不定时更新中"
"还未写完,但可全部通关"
"仅供参考"

第1关:冒泡排序

void sort_array(int *arr, int n)
//  编程实现《冒泡排序算法》:将乱序序列arr转化为升序序列
//  函数参数:乱序整数数组arr 数组长度
//  要求输出:调用print_array(int *arr, int n)输出前三次冒泡操作后的序列,以及最终的升序序列
{
   
   
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    /*
    int i ,j;
    for(i=0;i<n-1;i++)//进行 n-1 次
    {
        for(j=0;j<n-i-1;j++)//每次 n-i-1 轮 
            if(arr[j]>arr[j+1])
            {//前>后  大的数后移
                int temp   =arr[j];
                    arr[j]    = arr[j+1];
                    arr[j+1] = temp; 
            }
        if(i<3)
            print_array(arr, n); //前三次输出  
    }
       
       print_array(arr, n);          
    */
    //优化:
    int i ,j;
    int flag ;

    for(i=0;i<n-1;i++)//进行 n-1 次
    {
   
   
        flag = 0;//交换标识

        for(j=0;j<n-i-1;j++)//每次 n-i-1 轮 
            if(arr[j]>arr[j+1])
            {
   
   //前>后  大的数后移
                int temp   =arr[j];
                    arr[j]    = arr[j+1];
                    arr[j+1] = temp; 
                    flag  = 1;
            }
        //-----------------------------
            if(flag==0)
                break;
            /*
                如果此时flag == 0 
                说明当前轮没有发生交换
                即;此时当前数列已经"有序"
            */
        //-----------------------------
            if(i<3)
                print_array(arr, n); //前三次输出  
    }
       print_array(arr, n);    
    /********** End **********/
}

第2关:选择排序

void sort_array(int *arr, int n)
//  编程实现《选择排序算法》:将乱序序列arr转化为升序序列
//  函数参数:乱序整数数组(无重复元素) 数组长度
//  要求输出:调用print_array(int *arr, int n)输出前三次选择操作后的序列,以及最终的升序序列
{
   
   
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
     int i ,j,min;
     int flag = 0,temp=0;
    for(i=0;i<n-1;i++)
    {
   
   
        min = arr[i];//设定最小值
        for(j=i+1;j<n;j++)
            if(min>arr[j])
                {
   
   //如果出现更小的值,保存更小值的下标
                    min = arr[j];
                    flag = 1;
                    temp=j;
                }

       if(flag==1)//"flag==1"说明找到更小的值,即下标发生了变化 -> 交换
       {
   
   
          int t = arr[i];
          arr[i]  = arr[temp];
          arr[temp] = t;
          flag = 0 ;
       }

        if(i<3)
            print_array(arr, n); //前三次输出  
    }
       
       print_array(arr, n);     
    
    /********** End **********/
}

第3关:插入排序

void sort_array(int *arr, int n)
//  编程实现《插入排序算法》:将乱序序列arr转化为升序序列
//  函数参数:乱序整数数组(无重复元素) 数组长度
//  要求输出:调用print_array(int *arr, int n)输出前三次插入操作后的序列,以及最终的升序序列
{
   
   
    // 请在这里补充代码,完成本关任务
    /********** Begin *********/
    
   	int i ,j ,temp;
	for(i =1;i<n;i++)
  	{
   
   
      if(arr[i]<arr[i-1])
      {
   
   
        temp = arr[i];
        for(j=i-1;temp<arr[j]&&j!=-1;j--)//注意此处的  !=-1           
             arr[j+1] = arr[j];
             
22春"计算机科学与技术"专业《计算方法》在线作业答案参考 1. 一个有n个结点的图,最多有( )个连通分量。 A.0 B.1 C.n-1 D.n 参考答案:D 2. 迭代法的优点是算法简单,因而编制程序比较容易。( ) 迭代法的优点是算法简单,因而编制程序比较容易。( ) A、错误 B、正确 参考答案:B 3. 已知一列数{8,9,7,4,1,2},使用简单选择排序法对其按照升序进行排列,第0趟比较之后数列为( ) A.8,9,7,4,1,2 B.1,9,7,4,8,2 C.8,7,4,1,2,9 D.1,2,8,9,7,4 参考答案:B 4. 在C语言中字符串的文件是string.h。( ) A.错误 B.正确 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第1页。5. 依据3个样点(0,1),(1,2)(2,3),其插值多项式p(x)为( )。 依据3个样点(0,1),(1,2)(2,3),其插值多项式p(x)为( )。 A、x B、x+1 C、x-1 D、x+2 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第1页。 6. 对于二分查找,表必须有序且表中数据必须是整型,实型或字符型。( ) A.错误 B.正确 参考答案:A 7. 按"先进后出"原则组织数据的数据结构是队列。( ) A.错误 B.正确 参考答案:A 8. 执行memset(s,'a',4)后,s的值为( )。 A."aaaa" B."a4" C."4a" D."eeee" 参考答案:A 9. 基于"使残差的平方和"为最小的准则来选取拟合曲线的方法称为曲线拟合的最小二乘法。( ) 基于"使残差的平方和"为最小的准则来选取拟合曲线的方法称为曲线拟合的最小二乘法。( ) A、错误 B、正确 参考答案:B 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第2页。10. 递归算法的执行过程分( )和( )两个阶段。 A.递归 B.递推 C.回归 D.回溯 参考答案:BC 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第2页。 11. 下列叙述中正确的是( )。 A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构 C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构 D.上述三种说法都不对 参考答案:B 12. 顺序结构、选择结构、循环结构三种结构共同特点是( ) A.只有一个入口 B.只有一个出口 C.结构内的每一部分都有机会被执行到(不存在死语句) D.结构内不存在死循环(永远执行不完的循环) 参考答案:ABCD 13. 下列排序方法中,哪一个是稳定的排序方法?( ) A.直接选择排序 B.二分法插入排序 C.希尔排序 D.快速排序 参考答案:B 14. 冒泡排序是一种不稳定排序方法。( ) A.错误 B.正确 参考答案:A 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第3页。15. 通过点(x ,y ),(x ,y )的拉格朗日插值基函数l (x ),l (x )满足( )。 通过点(x ,y ),(x ,y )的拉格朗日插值基函数l (x ),l (x )满足( )。 A、l (x )=0,l (x )=0 B、l (x )=0,l (x )=1 C、l (x )=1,l (x )=0 D、l (x )=1,l (x )=1 参考答案:D 22春"计算机科学与技术"专业《计算方法》在线作业一答案参考9全文共5页,当前为第3页。 16. 下列说法错误的是( ) A.使用高级计算机语言,如C、C++、Java,编写的程序,都需要经过编译器编译或解释,才能转化成机器能够识别并能执行的二进制代码 B.如何一步步的跟踪代码,找到问题,搞明白为何程序不能正常运行,这个过程称为调试程序 C.自动化的工具同样也能够帮助你跟踪程序,尤其当程序很复杂时效果更加明显,这种工具叫做调试器 D.调试器不能解决程序中出现的问题 参考答案:D 17. 议程的近似方法有( ) A.迭代法 B.牛顿法 C.弦截法 D.二分法 参考答案:ABCD 18. 对一组数据(84,47,25,15,21)排序,数据的排列次序在排序的过程中的变化为(1) 84 47 25 15 21 (2) 15 47 25 84 21 (3) 15 21 25 84 47 (4) 15 21 25 47 84 则采用的排序方法是( )。 A.选择 B.冒泡 C.快速 D.插入 参考答案:A 22春"计算机科学与技术"专业《计算方法》在线
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值