首页 > 代码库 > 剑指Offer34 数组中的逆序对
剑指Offer34 数组中的逆序对
1 /************************************************************************* 2 > File Name: 34_InversePairsInArray.c 3 > Author: Juntaran 4 > Mail: JuntaranMail@gmail.com 5 > Created Time: 2016年09月02日 星期五 20时05分05秒 6 ************************************************************************/ 7 8 #include <stdio.h> 9 #include <malloc.h>10 11 int InversePairsCore(int* nums, int* copy, int left, int right)12 {13 if (left == right)14 {15 copy[left] = copy[right];16 return 0;17 }18 int newlength = (right - left) / 2;19 20 // 递归21 int leftCount = InversePairsCore(copy, nums, left, left+newlength);22 int rightCount = InversePairsCore(copy, nums, left+newlength+1, right);23 24 // i初始化为前半段最后一个数字下标25 int i = left + newlength;26 // j初始化为后半段最后一个数字下标27 int j = right;28 29 int indexCopy = right;30 int count = 0;31 32 while (i>=left && j>=left+newlength+1)33 {34 if (nums[i] > nums[j])35 {36 copy[indexCopy--] = nums[i--];37 count += j - left - newlength;38 }39 else40 {41 copy[indexCopy--] = nums[j--];42 }43 }44 45 for (i; i >= left; --i)46 copy[indexCopy--] = nums[i];47 for (j; j>=left+newlength+1; --j)48 copy[indexCopy--] = nums[j];49 50 return leftCount + rightCount + count;51 }52 53 int InversePairs(int* nums, int length)54 {55 if (nums==NULL || length<=0)56 return -1;57 58 int* copy = (int*)malloc(sizeof(int)*length);59 for (int i = 0; i < length; ++i)60 copy[i] = nums[i];61 62 int count = InversePairsCore(nums, copy, 0, length-1);63 delete[] copy;64 65 return count;66 }67 68 int main()69 {70 int nums[] = {7,5,6,4};71 int length = 4;72 int ret = InversePairs(nums, length);73 printf("%d\n", ret);74 }
剑指Offer34 数组中的逆序对
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。