数据结构-实验四 排序算法的实现

这篇博客是广州大学学生的实验报告,重点探讨了数据结构中四种排序算法——冒泡排序、快速排序、基数排序的实现细节与应用。
摘要由CSDN通过智能技术生成

广州大学学生实验报告

开课实验室:计算机科学与工程实验(电子楼417)     2018年06月13日

学院

计算机科学与教育软件学院

年级、专业、班

网络161

姓名

卟咚君

学号

1606100***

实验课程名称

数据结构实验

成绩

 

实验项目名称

实验四排序算法的实现

指导老师

**

一、实验目的

加强对多种排序算法的理解

二、使用仪器、器材

微机一台

操作系统:WinXP

编程软件:C++

三、实验内容及原理

实验内容:用随机函数生成16个2位正整数(10~99),从复杂度为O(n2) 的插入排序、选择排序、冒泡(双向冒泡)和复杂度为O(nlog2n) 的堆排序、快速排序、归并排序等多种排序算法各选1种实现,输出排序中间过程、统计关键字的比较次数和记录的移动次数。

思路:用随机函数rand() % 90 + 10生成16个2位正整数(10~99),使用时间复杂度为O(n2)

的冒泡排序对生成16个2位正整数进行排序。冒泡排序:在每一轮的排序中,通过相邻的两个数的比较, 根据需要决定是否将两个数互换位置, 然后将比较往前(或往后)推进. 这一轮循环结束后最值将会置于顶端。使用时间复杂度为O(nlog2n)的快速排序对生成16个2位正整数进行排序。快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。另外还可以使用基数排序对生成16个2位正整数进行排序。基数排序(radix sort)属于“分配式排序”,基数排序的总体思路就是将待排序数据拆分成多个关键字进行排序,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O(d(n+rd)),其中d为所采取的基数,而r为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。在本次实验内容中,使用d=2,r=10,使用基数排序解决本次实验内容问题的时间复杂度为O(n),比前面的两种算法都要快和稳定。

#include<iostream>

#include<bits/stdc++.h>

using namespace std;

const int maxn = 10000 + 10;

/*

*冒泡排序

*在每一轮的排序中,通过相邻的两个数的比较, 根据需要决定是否将两个数互换位置, 然后将比较往前(或往后)推进. 这一轮循环结束后最值将会置于顶端

*/

int cnt_compare, cnt_move;

void bubblesort(int *arrayVal, int length) {

    int i, j;

    int temp;

    for (i = 0; i<length - 1; i++) {

         bool flag = false//减枝,标记数组的元素是否在下一轮比较中发生交换,如果没有可以提前结束排序

         for (j = i + 1; j<length; j++) {

             cnt_compare++;

             if (arrayVal[i]>arrayVal[j]) {

                  cnt_move++;

                  flag = true;

                  temp = arrayVal[i];  //置换位置

                  arrayVal[i] = arrayVal[j];

  • 13
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值