#include<stdio.h>
void merge(int arr[], int l, int m, int r) {
const int left_size = m - l;
const int right_size = r - m + 1;
int left[left_size];
int right[right_size];
int i, j, k;
for (i = l; i < m; i++)
left[i - l] = arr[i];
for (i = m; i <= r; i++)
right[i - m] = arr[i];
i = 0, j = 0, k = l;
while (i < left_size && j < right_size)
{
if (left[i] < right[j])
{
arr[k] = left[i];
k++;
i++;
}
else
{
arr[k] = right[j];
k++;
j++;
}
}
while (i < left_size)
{
arr[k] = left[i];
k++;
i++;
}
while (j < right_size)
{
arr[k] = right[j];
k++;
j++;
}
}
void mergesort(int arr[], int l, int r) {
if (l == r) return;
else {
int m = (l + r) / 2;
mergesort(arr, l, m);
mergesort(arr, m + 1, r);
merge(arr, l, m + 1, r);
}
}
int main()
{
int n;
int arr[1000000];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &arr[i]);
mergesort(arr, 0, n);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
}
网上PO的优化代码(复制粘贴)
#include<stdio.h>
void Merge_Sort(int* arr, int* temparr, int start, int mid, int end)
{
int left_start = start;
int left_end = mid;
int right_start = mid + 1;
int right_end = end;
int index = start;
while (left_start <= left_end && right_start <= right_end)
{
if (arr[left_start] > arr[right_start])
temparr[index++] = arr[right_start++];
else
temparr[index++] = arr[left_start++];
}
while (left_start <= left_end)
temparr[index++] = arr[left_start++];
while (right_start <= right_end)
temparr[index++] = arr[right_start++];
for (index = start; index <= end; ++index)
arr[index] = temparr[index];
}
void Sort_Message(int* arr, int* temparr, int start, int end)
{
if (start < end)
{
int mid = (start + end) / 2;
Sort_Message(arr, temparr, start, mid);
Sort_Message(arr, temparr, mid + 1, end);
Merge_Sort(arr, temparr, start, mid, end);
}
}
int main(void)
{
int a[1000000];
int i, temp[1000000];
int n;
scanf_s("%d", &n);
for (i = 0; i < n; ++i)
scanf_s("%d", &a[i]);
Sort_Message(a, temp, 0, n - 1);
for (i = 0; i < n; ++i)
printf("%d ", a[i]);
return 0;
}
1.排序算法学习
A.插入排序
学习了原理,未操作实践.
B.归并排序 将初始数组分为left,right两部分,sort使两部分呈有序排列,再合并。![动图](https://pic1.zhimg.com/v2-b99460f4173a23f9ed1be77f2f9fd224_b.webp)
B站视频 学习代码(手动实现)
网上PO的优化代码(复制粘贴)
手动实现,全文背诵.
1.冒泡外层走3三趟可以找出(174ms)。
单位是毫秒。显示“没有测试”的是因为慢到没朋友,直接跳过。Release模式下,开的o2优化:
来源是知乎!
2.新生赛补题 已补3个题。 后知后觉
3.数据结构 目标:
4.学习外的生活 到期末,课渐少,我可支配的时间越来越多。 总结