1. 程式人生 > 其它 >關於前端框架Layui使用Ajax實現分頁模糊查詢的操作

關於前端框架Layui使用Ajax實現分頁模糊查詢的操作

技術標籤:演算法基礎c++排序演算法演算法資料結構

歸併排序

給定你一個長度為n的整數數列。

請你使用歸併排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。

第二行包含 n 個整數(所有整數均在 1 − 1 0 9 1-10^9 1109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

資料範圍

1 ≤ n ≤ 100000 1≤n≤100000 1n100000

輸入樣例:

6
3 1 6 2 4 5

輸出樣例:

1 2 3 4 5 6
#include <bits/stdc++.h>
using namespace
std; // int a[100005]; // void merge_sort(int *arr,int b,int e) { if(b>=e) return; int mid = (b+e)>>1; //取中點 merge_sort(arr,b,mid); //遞迴排右邊 merge_sort(arr,mid+1,e); //左邊 //歸併 int *slot = new int[e-b+1]; //申請堆區空間 memset(slot,0,sizeof(slot)); int i=b , j=mid+1 , k=0; while(i <= mid &&
j<=e) { if(arr[i] < arr[j]) slot[k++] = arr[i++]; else slot[k++] = arr[j++]; } int begin = i , end = mid; //假設左邊未完全插入到slot[]中的元素區間 if(i>mid) //如果左邊全部在slot[]中 ,那麼就將begin和end指向右邊的未插入的元素區間 { begin = j; end = e; } while(begin <= end) slot[k++] = arr[begin++]; //將begin 和 end 區間內的元素放到slot[]中
for(int i=0;i<k;i++) arr[b+i] = slot[i]; //釋放記憶體 delete[] slot; } int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); merge_sort(a,0,n-1); for(int i=0;i<n;i++) printf("%d ",a[i]); printf("\n"); }

問題應用

給定一個長度為n的整數數列,請你計算數列中的逆序對的數量。

逆序對的定義如下:對於數列的第 i 個和第 j 個元素,如果滿足 i < j 且 a[i] > a[j],則其為一個逆序對;否則不是。

輸入格式

第一行包含整數n,表示數列的長度。

第二行包含 n 個整數,表示整個數列。

輸出格式

輸出一個整數,表示逆序對的個數。

資料範圍

1 ≤ n ≤ 100000 1≤n≤100000 1n100000

輸入樣例:

6
2 3 4 5 6 1

輸出樣例:

5

AC程式碼:(歸併排序的思想)

#include <bits/stdc++.h>
using namespace std;
//
int a[100005];
int n;
//
long long merge_sort(int *arr,int b,int e)
{
	if(b>=e) return 0;
	int mid = b + e >> 1;
	long long ans = merge_sort(arr,b,mid) + merge_sort(arr,mid+1,e);
	//歸併
	int *slot = new int[e-b+1];
	
	int i=b , j=mid+1 , k=0;
	while( i<=mid && j<=e)
	{
		if(arr[i] <= arr[j])
			slot[k++] = arr[i++];
		else	//如果arr[i] > arr[j] 那麼在 i~mid 的所有元素都大於arr[j] 那麼ans就加上 mid-i+1
		{
			slot[k++] = arr[j++];
			ans += mid-i+1;		
		}
	}
	while(i<=mid) slot[k++] = arr[i++];
	while(j<=e) slot[k++] = arr[j++];
	for(int i=0;i<k;i++)
		arr[b+i] = slot[i];
	
	delete[] slot;
	return ans;
}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    
    cout<<merge_sort(a,0,n-1)<<endl;
    return 0;
}