• 归并排序 快速排序


     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 void quicksort(vector<int>& a,int l,int r){
     8     //递归出口
     9     if(l >= r)return;
    10     //根据左右边界定义两个指针,在i指针左面的 <=target , 在j指针右面的 >= target
    11     int i = l - 1, j = r + 1;   
    12     //target 为在当前的区间【l,r】中任意一个数,一般选l, r, l+r>>2, random 位置的值
    13     int target = a[l+r>>1];
    14     //这里实现i指针左面<=target,j指针右面>=target,终止条件是连个指针没有相遇
    15     while(i < j){
    16         //只要连个指针遇见不满足条件的数,就停在那个数的位置上,否则继续走
    17         do ++i; while(a[i] < target);
    18         do --j; while(a[j] > target);
    19         //这里实现交换,因为i位置的数一定满足>=target,同理j位置也一样,所以他俩相互交换,使得分别得到自己想要的数
    20         if(i < j)swap(a[i],a[j]);
    21     }
    22     //递归的去排序已经排好的两个区间
    23     quicksort(a,l,j);
    24     quicksort(a,j+1,r);
    25 }
    26 
    27 int main(){
    28     int n;
    29     cin >> n;    
    30     vector<int> a(n,0);
    31     for(int i = 0;i < a.size();++i)cin>>a[i];
    32     quicksort(a,0,a.size()-1);
    33     for(int i = 0;i < a.size();++i)cout << a[i] << " ";
    34     return 0;
    35 }
     1 #include <iostream>
     2 #include <algorithm>
     3 #include <vector>
     4 
     5 using namespace std;
     6 
     7 int n;
     8 vector<int> arr(1e6+10,0);
     9 vector<int> help(1e6+10,0);//辅助数组
    10 
    11 void unionsort(vector<int>& arr,int l,int r){
    12     //递归出口
    13     if(l >= r)return;
    14     //递归地把左边一半和右边一半分别排好序
    15     int mid = l + r >> 1;
    16     unionsort(arr,l,mid);
    17     unionsort(arr,mid+1,r);
    18     //合并已经排好序的两部分
    19     int i = l, j = mid + 1, k = 0;
    20     while(i <= mid && j <= r){
    21         if(arr[i] <= arr[j]) help[k++] = arr[i++];
    22         else help[k++] = arr[j++];
    23     }  
    24     //将剩下的部分合并    
    25     while(i <= mid)help[k++] = arr[i++];
    26     while(j <= r)help[k++] = arr[j++];
    27     //此时辅助数组已经排好序,复制回原数组
    28     for(int i = l,j = 0;i <= r;++i,++j)arr[i] = help[j];
    29 }
    30 
    31 int main(){
    32     cin >> n;
    33     for(int i = 0;i < n;++i)cin>>arr[i];
    34     unionsort(arr,0,n-1);
    35     for(int i = 0;i < n;++i)cout << arr[i] << " ";
    36     return 0;
    37 }
  • 相关阅读:
    Sharepoint 文档库根据文件夹层级展示
    SQL数据库修改默认备份和恢复路径
    利用Ajax增删改Sharepoint List Item
    Excel数据导入到Sharepoint List
    使用powershell部署WSP包
    高阶组件
    ui组件库
    2019面试题总结
    项目上线步骤及注意事项
    git使用
  • 原文地址:https://www.cnblogs.com/sxq-study/p/12063341.html
Copyright © 2020-2023  润新知