建中電子計算機研習社
假設我們今天有兩個值
那我們要如何將個個值交換
想想看吧?
int c=a;
a=b;
b=c;
程式碼
a^=b^=a^=b;
程式碼
swap(a,b);
程式碼
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> data(n);
for(int i=0;i<n;i++) cin>>data[i];
//selection sort
for(int i=0,Min;i<n-1;i++){
Min=i;
for(int j=i+1;j<n;j++){
if(data[j]<data[Min]) Min=j;
}
swap(data[i],data[Min]);
}
//end
for(int i=0;i<n;i++) cout<<data[i]<<" ";
cout<<endl;
}
# PRESENTING CODE
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> data(n);
for(int i=0;i<n;i++) cin>>data[i];
//bubble sort
for(int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){
if(data[j]>data[j+1]) swap(data[j],data[j+1]);
}
}
//end
for(int i=0;i<n;i++) cout<<data[i]<<" ";
cout<<endl;
}
# PRESENTING CODE
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<int> data(n);
for(int i=0;i<n;i++) cin>>data[i];
//insert sort
int tmp;
for(int i=1,j;i<n;i++){
tmp=data[i];
for(j=i-1;j>=0&&data[j]>tmp;j--) data[j+1]=data[j];
data[j+1]=tmp;
}
//end
for(int i=0;i<n;i++) cout<<data[i]<<" ";
cout<<endl;
}
# PRESENTING CODE
排序一半
合併
底數是2
#include<bits/stdc++.h>
using namespace std;
void mergesort(int l,int r,vector<int> &data){
if(r-l==1) return ;
int mid=l+r>>1,tmp_len=mid-l;
mergesort(l,mid,data),mergesort(mid,r,data);
vector<int> tmp(tmp_len);
for(int i=0;i<tmp_len;i++) tmp[i]=data[i+l];
for(int L=0,R=mid,i=l;L<tmp_len;i++){
if(tmp[L]<data[R]||R==r) data[i]=tmp[L++];
else data[i]=data[R++];
}
return ;
}
int main(){
int n;
cin>>n;
vector<int> data(n);
for(int i=0;i<n;i++) cin>>data[i];
mergesort(0,n,data);
for(int i=0;i<n;i++) cout<<data[i]<<" ";
cout<<endl;
}
# PRESENTING CODE