归并排序:
#include<bits/stdc++.h>
using namespace std;
int A[100];
int T[100];
int cnt;
void merge_sort(int *A, int x, int y, int *T)
{
if(y-x > 1)
{
int m = x + (y-x)/2;
int p = x, q = m, i = x;
merge_sort(A, x, m, T);
merge_sort(A, m, y, T);
while(p < m || q < y)
{
if(q >= y || (p < m && A[p] <= A[q])) //后半截数组为空或者前半截数组的
T[i++] = A[p++];
else
{
T[i++] = A[q++];
cnt += (m-p);
}
}
for(int i = x; i < y; i++)
A[i] = T[i];
}
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
cin >> A[i];
cnt = 0;
merge_sort(A, 0, n, T);
for(int i = 0; i < n; i++)
cout << A[i] << " ";
cout << endl;
cout << cnt << endl;
return 0;
}
二分查找:
#include<bits/stdc++.h>
using namespace std;
int A[100];
int baserch(int *A, int x, int y, int v)
{
int m;
while(x < y)
{
m = (x+y)/2;
if(A[m] == v) return m;
else if(A[m] > v) y = m;
else x = m+1;
}
return -1;
}
int main()
{
int n;
int v;
cin >> n >> v;
for(int i = 1; i < n; i++)
cin >> A[i];
sort(A, A+n);
int xx = baserch(A, 0, n, v);
cout << xx << endl;
return 0;
}