当前位置: 代码迷 >> 综合 >> 《算法笔记》Codeup练习 4.6小节 two pointers
  详细解决方案

《算法笔记》Codeup练习 4.6小节 two pointers

热度:17   发布时间:2024-02-01 07:04:20.0

问题A 二路归并排序(mergeSort)递归法

题目大意
就是最基础的递归二路归并排序的算法思想。

注意
这题测试结果Runtime Error80就是正确的。

//
// main.cpp
// 二路归并排序(mergesort)递归法
//
// Created by JustforStar on 2020/7/25.
// Copyright ? 2020 JustforStar. All rights reserved.
//
#include<stdio.h>
#include <iostream>
#define MAXN 100001
using namespace std;
int a[MAXN];
int n;void merge(int A[],int l1,int r1,int l2,int r2){int i=l1,j=l2;int temp[MAXN],index=0;while(i<=r1&&j<=r2){if(A[i]<=A[j]){temp[index++]=A[i++];}else{temp[index++]=A[j++];}}while(i<=r1)temp[index++]=A[i++];while(j<=r2)temp[index++]=A[j++];for(i=0;i<index;i++)A[l1+i]=temp[i];
}void mergeSort(int A[],int left,int right){if(left<right){int mid=(left+right)/2;mergeSort(A, left, mid);mergeSort(A, mid+1, right);merge(A,left,mid,mid+1,right);}
}int main(int argc, const char * argv[]) {// insert code here...scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);mergeSort(a, 0, n-1);for(int i=0;i<n;i++)printf("%d\n",a[i]);return 0;
}

问题B 基础排序III 归并排序

题目大意
同问题A,唯一的区别在于问题B是明确要求多点测试

//
// main.cpp
// Codeup-归并排序
//
// Created by JustforStar on 2020/7/25.
// Copyright ? 2020 JustforStar. All rights reserved.
//#include<stdio.h>
#include <iostream>
#define MAXN 100001
using namespace std;
int a[MAXN];
int n,m;void merge(int A[],int l1,int r1,int l2,int r2){int i=l1,j=l2;int temp[MAXN],index=0;while(i<=r1&&j<=r2){if(A[i]<=A[j]){temp[index++]=A[i++];}else{temp[index++]=A[j++];}}while(i<=r1)temp[index++]=A[i++];while(j<=r2)temp[index++]=A[j++];for(i=0;i<index;i++)A[l1+i]=temp[i];
}void mergeSort(int A[],int left,int right){if(left<right){int mid=(left+right)/2;mergeSort(A, left, mid);mergeSort(A, mid+1, right);merge(A,left,mid,mid+1,right);}
}int main(int argc, const char * argv[]) {// insert code here...scanf("%d",&m);while(m--){scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);mergeSort(a, 0, n-1);for(int i=0;i<n;i++)printf("%d\n",a[i]);}return 0;
}

问题C 快速排序qsort

问题D 二分递归快排(Qsort)

题目大意
最基本的快速排序的思想

//
// main.cpp
// Codeup-快速排序
//
// Created by JustforStar on 2020/7/25.
// Copyright ? 2020 JustforStar. All rights reserved.
//#include <iostream>
#include<stdio.h>
#define MAXN 5001
using namespace std;int n;
int a[MAXN];int Partition(int A[],int left,int right){int temp=A[left];while(left<right){while(left<right&&A[right]>temp)right--;A[left]=A[right];while(left<right&&A[left]<=temp)left++;A[right]=A[left];}A[left]=temp;return left;
}void quickSort(int A[],int left,int right){if(left<right){int pos=Partition(A, left, right);quickSort(A, left, pos-1);quickSort(A, pos+1, right);}
}int main(int argc, const char * argv[]) {scanf("%d",&n);for(int i=0;i<n;i++)scanf("%d",&a[i]);quickSort(a, 0, n-1);for(int i=0;i<n;i++)printf("%d\n",a[i]);return 0;
}
  相关解决方案