C++排序实验

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 C++排序实验,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1.给出已知的顺序线性表结构体如下所示:

#define MaxSize 50
typedef int ElemType;
typedef struct {
	ElemType data[MaxSize];
   	int length;
} SqList;

2.给出待排序记录的关键字序列为{52, 49, 80, 36, 14, 58, 61, 23, 97, 75}。

3.分别写出上述待排序记录的直接插入排序算法、冒泡排序算法和快速排序算法,并进行算法比较。

sort.cpp

#include <stdio.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    int data[MaxSize];
    int length;
} SqList;

// 插入排序
void InsertSort(SqList *L) {
    int i, j;
    for (i = 2; i <= L->length; i++) {
        // 插入到有序子表
        if (L->data[i] < L->data[i - 1]) {
            // 待插入的记录暂存到监视哨中
            L->data[0] = L->data[i];
            // data[i-1] 后移
            L->data[i] = L->data[i - 1];
            // 从后向前寻找插入位置
            for (j = i - 2; L->data[0] < L->data[j]; j--) {
                // 记录逐个后移,直到找到插入位置
                L->data[j + 1] = L->data[j];
            }
            // 将data[0]即原data[i],插入到正确位置
            L->data[j + 1] = L->data[0];
        }
    }
}

// 冒泡排序
void BubbleSort(SqList *L) {
    int i, j;
    for (i = 1; i <= L->length; i++) {
        for (j = 1; j <= L->length - i; j++) {
            if (L->data[j] > L->data[j + 1]) {
                int temp = L->data[j];
                L->data[j] = L->data[j + 1];
                L->data[j + 1] = temp;
            }
        }
    }
}

int Partition(SqList *L, int low, int high) {
    // 用子表的第一个记录做枢轴记录
    L->data[0] = L->data[low];
    // 枢轴记录关键字保存在pivotkey中
    int pivotkey = L->data[low];
    // 从表的两端交替向中间扫描
    while (low < high) {
        while (low < high && L->data[high] >= pivotkey) {
            --high;
        }
        // 将比枢轴记录小的记录移到低端
        L->data[low] = L->data[high];
        while (low < high && L->data[low] <= pivotkey) {
            ++low;
        }
        // 将比枢轴记录大的记录移到高端
        L->data[high] = L->data[low];
    }
    L->data[low] = L->data[0];
    return low;
}

void QuickSort(SqList *L, int low, int high) {
    if (low < high) {
        // 将L.data[low,high] 一分为二  pivotloc是枢轴位置
        int pivotloc = Partition(L, low, high);
        // 对左子表递归排序
        QuickSort(L, low, pivotloc - 1);
        // 对右子表递归排序
        QuickSort(L, pivotloc + 1, high);
    }
}

// 快速排序
void QuickSort(SqList *L) {
    QuickSort(L, 1, L->length);
}


int main() {

    int a[] = {52, 49, 80, 36, 14, 58, 61, 23, 97, 75};
    int i, k;
    SqList s;
    printf("\n待排序数据为:\n");
    for (i = 1; i < 10; i++) {
        s.data[i] = a[i - 1];
        printf("%d  ", a[i - 1]);
    }
    s.length = i - 1;
    printf("\n1,插入排序\n2,冒泡排序\n3,快速排序\n");
    printf("请输入序号\n");
    scanf("%d", &k);
    switch (k) {
        case 1:
            //在此处调用插入函数
            InsertSort(&s);
            break;
        case 2:
            //在此处调用冒泡函数
            BubbleSort(&s);
            break;
        case 3:
            //在此处调用快速函数
            QuickSort(&s);
            break;
        default:
            printf("No function which you select.\n");
    }
    printf("\n排序后的记录为\n");
    for (i = 1; i < 9; i++)
        printf("%d  ", s.data[i]);

    printf("\n");

}

运行截图


插入排序
在这里插入图片描述
冒泡排序
在这里插入图片描述
快速排序
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140677.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!