数据结构与算法之美,归并排序的实现。
每日进步一点点,今日:传入要改动的参数时需要加引用符“&”。
#include <iostream>
#include <vector>
using namespace std;
//归并
void merge(vector<int>& nums, int p,int mid, int q) {
vector<int> xuse(q-p+1);
int i = p, j = mid + 1,k=0;
//开始合并并且存放到临时数组
while (i <= mid && j <= q) {
if (nums[i] < nums[j])
xuse[k++] = nums[i++];
else
xuse[k++] = nums[j++];
}
//剩下的尾巴也一起放进去
if (i > mid){
while (j<=q)
xuse[k++] = nums[j++];
}
else
{
while (i <= mid)
xuse[k++] = nums[i++];
}
//临时数组转移到原数组中
k = 0;
for (int i = p; i < q + 1; ++i) {
nums[i] = xuse[k++];
}
}
//排序
//递归的思想,将数组分成(p,mid)、(mid+1,q)两部分,分别对每部分再次排序,最后合并两部分
void xSort(vector<int> &nums,int p,int q) {
if (p >= q)
return;
int mid = (p + q) / 2;
xSort(nums, p, mid);
xSort(nums, mid + 1, q);
merge(nums, p, mid, q);
}
int main() {
//输入数组
int xlen,x;
cout << "请输入长度";
cin >> xlen;
vector<int> testNums(xlen);
for (int i = 0; i < xlen; ++i) {
cin >> x;
testNums[i] = x;
}
//排序
xSort(testNums, 0,xlen-1);
//打印结果
for (int i = 0; i < xlen;++i) {
cout << testNums[i]<<" ";
}
}