Created
January 20, 2015 12:17
-
-
Save yxjxx/589768d05036df3bb1ed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <iomanip> | |
using namespace std; | |
#define SORT_NUM 4 | |
int my_count=0;//全局变量 | |
void create_array_with_random_numbers(int myArray[], int len){ | |
for (int i = 0; i < len; ++i) { | |
sranddev(); | |
myArray[i] = rand() % 100; | |
} | |
} | |
void print_array(int myArray[], int len){ | |
for (int i = 0; i < len; ++i) { | |
cout << right << setw(3) << myArray[i]; | |
} | |
cout << endl; | |
} | |
void merge(int myArray[], int low, int mid, int high){ | |
int i,j,k; | |
int backupArray[high+1]; | |
for (i = low; i <= high; ++i) { | |
backupArray[i] = myArray[i]; | |
} | |
for(i = low,j = mid+1,k = i;i <= mid && j <= high;k++){ | |
if(backupArray[i] <= backupArray[j]){ | |
myArray[k] = backupArray[i++]; | |
} | |
else{ | |
//在merge_sort的基础上加上下面这句话即可。由于merge的左数组和右数组都是有序的,一旦出现backupArray[i] >= backupArray[j],左数组在i之后全部构成逆序对。 | |
my_count += (mid-i+1); | |
myArray[k] = backupArray[j++]; | |
} | |
} | |
while(i <= mid){ | |
myArray[k++] = backupArray[i++]; | |
} | |
while(j <= high){ | |
myArray[k++] = backupArray[j++]; | |
} | |
} | |
void merge_sort(int myArray[], int low, int high){ | |
if(low < high){ | |
int mid = (low + high) / 2; | |
merge_sort(myArray, low, mid); | |
merge_sort(myArray, mid+1, high); | |
merge(myArray, low, mid, high); | |
} | |
} | |
int calc_reverse_num(int myArray[], int len){ | |
merge_sort(myArray, 0, len-1); | |
return my_count; | |
} | |
int main() | |
{ | |
int len = SORT_NUM; | |
int myArray[len]; | |
create_array_with_random_numbers(myArray, len); | |
print_array(myArray, len); | |
cout << calc_reverse_num(myArray, len); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment