当前位置: 首页> 教育> 培训 > 浙江大学数据结构MOOC-课后习题-第九讲-排序1 排序

浙江大学数据结构MOOC-课后习题-第九讲-排序1 排序

时间:2025/7/10 8:39:42来源:https://blog.csdn.net/chan1ee/article/details/139246650 浏览次数:0次

题目汇总
浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024

题目描述
在这里插入图片描述

文章目录

  • 冒泡排序
  • 插入排序
  • 希尔排序
  • 堆排序
  • 归并排序

冒泡排序

在这里插入图片描述

void buble_Sort()
{	int A[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];bool flag = false;int temp;for (int j = N - 1; j > 0; j--){	flag = false;for (int i = 0; i < j; i++){if (A[i] > A[i + 1]){temp = A[i];A[i] = A[i + 1];A[i + 1] = temp;flag = true;}}if (flag == false) break;}for (int i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}return;
}

插入排序

在这里插入图片描述

#include <iostream>
#define MAXSIZE 100000void insertion_Sort()
{	/* 初始化 */int A[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];/* 算法 */int i, j, temp;for (i = 1; i < N; i++){temp = A[i];	/* 摸牌 */for (j = i; j > 0 && A[j - 1] > temp; j--)A[j] = A[j - 1];A[j] = temp;}/* 打印 */for (int i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}}int main()
{	insertion_Sort();return 0;
}

希尔排序

在这里插入图片描述

#include <iostream>#define MAXSIZE 100000void shell_Sort()
{	/* 初始化 */int A[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];/* 算法 *///Sedgewick序列int Sedgewick[] = { 929, 505, 209, 109, 41, 19, 5, 1, 0 };int i, j, Si, D, temp;/* 选取初始增量 */for (Si = 0; Sedgewick[Si] >= N; Si++);/* 开始排序 */for (D = Sedgewick[Si]; D > 0 ; D = Sedgewick[Si++])/* 增量变动 */{	/* 插入排序 */for (i = D; i < N; i++)/* 从第二堆中开始抽牌 */{temp = A[i];//for (j = i; j >= D && A[j - D] > temp; j -= D)for (j = i; j > D && A[j - D] > A[i]; j -= D){A[j] = A[j - D];}A[j] = temp;}}/* 打印 */for (i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}}int main()
{	shell_Sort();return 0;
}

堆排序

在这里插入图片描述

#include <iostream>
typedef int ElementType;
#define MAXSIZE 100000void swap(int A[], int i, int j)
{int temp = A[i];A[i] = A[j];A[j] = temp;
}
void PercDown(int A[], int p, int N)
{/* 将N个元素的数组中以A[p]为根的子堆调整为最大堆 */int parent, child;int r = A[p]; /* 存放根节点的值 */for (parent = p; (parent * 2 + 1) < N; parent = child){child = parent * 2 + 1;if (child != N - 1 && A[child] < A[child + 1])child++;	/* child指向左右孩子中较大者 */if (r >= A[child]) break;	/* 找到恰当的位置 */else A[parent] = A[child];	}/* 找到恰当的值,或者遍历完节点了 */A[parent] = r;
}void heap_Sort()
{	/* 初始化 */int A[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];/* 算法 *///建立最大堆for(int i = N / 2; i >= 0; i--)PercDown(A, i, N);/* 删除最大堆堆顶 */for (int i = N - 1; i > 0; i--){swap(A, 0, i);PercDown(A, 0, i);}/* 打印 */for (int i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}}int main()
{	heap_Sort();return 0;
}

归并排序

在这里插入图片描述

#include <cstdlib>
#include <iostream>
typedef int ElementType;
#define MAXSIZE 100000void Merge(int A[], int tempA[], int L, int R, int rightEnd)
{int leftEnd = R - 1;int length = rightEnd - L + 1;int i = L;while (L <= leftEnd && R <= rightEnd){if (A[L] < A[R])tempA[i++] = A[L++];elsetempA[i++] = A[R++];}while(L <= leftEnd)tempA[i++] = A[L++];while(R <= rightEnd)tempA[i++] = A[R++];
}void Merge_pass(int A[], int tempA[], int N, int length)
{	int i = 0;for (i = 0; i <= N - 2 * length; i += 2 * length)Merge(A, tempA, i, i + length, i + 2 * length - 1);if (i + length < N)Merge(A, tempA, i, i + length, N - 1);else{for (; i < N; i++)tempA[i] = A[i];}
}void Mergy_Sort()
{	/* 初始化 */int A[MAXSIZE];int N;std::cin >> N;for (int i = 0; i < N; i++)std::cin >> A[i];/* 算法 */int* tempA = (int*)malloc(N * sizeof(int));int length = 1;if (tempA != NULL){while (length < N){Merge_pass(A, tempA, N, length);length *= 2;Merge_pass(tempA, A, N, length);length *= 2;}free(tempA);}else std::cout << "ERROR";/* 打印 */for (int i = 0; i < N; i++){if (i == 0)std::cout << A[i];elsestd::cout << ' ' << A[i];}}int main()
{	Mergy_Sort();return 0;
}
关键字:浙江大学数据结构MOOC-课后习题-第九讲-排序1 排序

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: