#include#includeusing namespace std;
void sentencereverse(string s) //句子中的單詞逆序輸出 }
if (end>=0)
for (int i = front + 1; i <= end; i++) //碰到分割符則輸出單詞
cout << s[i];
}void sentencereverse2(string sentence) //逆序輸出句中單詞
} for (int i = front + 1; i <= end; i++)
cout << sentence[i]; //將最後乙個單詞輸出
}void merge(int *data, int start, int mid, int end) //將從開始到結束的陣列從mid部分成兩部分,將兩部分按從大到小拼成乙個陣列
} while (jdata[k++] = right[j++];
while (i < len1)
data[k++] = left[i++];
deleteleft; //結束釋放掉左右陣列的空間
deleteright;
}void mergesort(int *data, int start,int end)
}void showdata(int *data, int len) //顯示陣列的元素
}int main()
; int len = sizeof(data) / sizeof(int);
mergesort(data, 0, len - 1);
showdata(data, len);
return 0;
}
歸併排序和逆序數
歸併排序通過分治的思想可以在nlogn的時間內完成陣列的排序 同時在歸併排序的歸併過程中,又可以通過排序內部的細節獲得原陣列的逆序數,見注釋 直接上 了 void merge int a,int start,int len,int size int l 0,r 0 int mid start len...
陣列中的逆序對(歸併排序)
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。在歸併排序的一次merge中,r j 1 法一 統計i的逆序數 int merge int a,int p,int q,int r int n1 q p 1,n2 r q in...
陣列中的逆序對(歸併排序)
題目 陣列中的逆序對 思路 典型的歸併排序 很好的題目 這是乙個歸併排序的合併過程,主要考慮合併兩個有序序列時,計算逆序對的個數!對於兩個公升序序列,設定兩個下標 前下標和後下標 初始化為前序列第乙個數字的下標和後序列第乙個數字的下標。如果前下標對應的值大於後下標對應的值,則有 前序列剩下的長度 個...