双向冒泡排序的数据结构实验报告

您所在的位置:网站首页 数据结构排序实验报告 双向冒泡排序的数据结构实验报告

双向冒泡排序的数据结构实验报告

2024-06-17 00:09| 来源: 网络整理| 查看: 265

目录

实验目的:

实验内容(实验题目与说明)

算法设计(核心代码或全部代码)

运行与测试(测试数据和实验结果分析)

总结与心得:

实验目的: 理解双向冒泡排序算法的原理和基本思路。熟悉双向冒泡排序在实际应用中的场景和优化方法。 实验内容(实验题目与说明)

编写一个双向冒泡排序算法,即在排序过程中以交替的正、反两个方向进行遍历。若第一趟把关键字最大的记录放到最末尾,则第二趟把关键字最小的记录放到最前端,如此反复进行之。

算法设计(核心代码或全部代码)

#include

#define max 10

 

void cocktailSort(int arr[], int size) {

    int left = 0;

    int right = size - 1;

    while (left < right) {

        int i, j;

        for (i = left; i < right; i++) { // 从左到右进行比较和交换

            if (arr[i] > arr[i + 1]) {

                int temp = arr[i];

                arr[i] = arr[i + 1];

                arr[i + 1] = temp;

            }

        }

        right--;

 

        for (j = right; j > left; j--) { // 从右到左进行比较和交换

            if (arr[j] < arr[j - 1]) {

                int temp = arr[j];

                arr[j] = arr[j - 1];

                arr[j - 1] = temp;

            }

        }

        left++;

    }

}

 

int main() {

    int arr[max], i;

 

    // 输入数组元素

    printf("输入 %d 个数: ", max);

    for (i = 0; i < max; i++) {

        scanf("%d", &arr[i]);

    }

 

    // 排序

    cocktailSort(arr, max);

 

    // 输出排序后的数组

    printf("排序后的结果: ");

    for (i = 0; i < max; i++) {

        printf("%d ", arr[i]);

    }

 

    return 0;

}

 

运行与测试(测试数据和实验结果分析)

0984a2e0acc546b0830d561cc1c3991e.png

使用两个指针 left 和 right 来表示当前未排序部分的左边界和右边界。首先,从左到右进行一轮比较和交换,将最大的元素放到右边。然后缩小右边界 right。接下来,从右到左进行一轮比较和交换,将最小的元素放到左边。最后扩大左边界 left。重复以上步骤,直到左边界 left 大于等于右边界 right。

总结与心得:

冒泡排序是交换排序中一种简单的排序方法。其基本思想是对所有相邻的关键字值进行比效,如果是逆顺(a[j]>a[j+1]),则将其交换,最终达到排序的目的。双向冒泡排序算法是对传统冒泡排序算法的一种改进,通过同时从左到右和从右到左两个方向进行比较和交换,减少了排序的轮数。在开始编写代码之前,我首先对双向冒泡排序算法的原理进行了深入的学习和理解。这包括了如何确定左右边界、两个方向的比较和交换操作等。

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3