归并排序
语言:c++
int a[maxn],cnt,b[maxn];
void mer(int l,int mid,int r)
{
int i=l,j=mid+1;
for(int k=l;k<=r;k++)
{
if(j > r || i <= mid && a[i] <= a[j])b[k] = a[i++];
else b[k] = a[j++],cnt += mid - i + 1; //cnt是逆序对数
}
for(int k = l; k <= r; k++)a[k] = b[k];
}
void merge(int l,int r)
{
if(l>=r)return ;
int mid=(l+r)/2;
merge(l,mid);
merge(mid+1,r);
mer(l,mid,r);
}
快速排序
语言:JavaScript
function qs(numbers, l, r) {
if(l < r) {
let tmp = numbers[l];
let i = l;
let j = r;
while(i < j) {
while(i < j && numbers[j] >= tmp) j--;
if(i < j) {
numbers[i++] = numbers[j];
}
while(i < j && numbers[i] < tmp) i++;
if(i < j) {
numbers[j--] = numbers[i];
}
}
numbers[i] = tmp;
qs(numbers,l, i - 1);
qs(numbers, i + 1, r);
}
}
function sort(numbers) {
qs(numbers,0,numbers.length-1);
}