1. 程式人生 > 遊戲攻略 >《寶可夢朱紫》校園賽刷錢方法

《寶可夢朱紫》校園賽刷錢方法

排序

簡單排序

插入排序

普 code

點選檢視程式碼
int n, cnt = 0;		 // 陣列長度 插入陣列長度 
int a[10005], r[10005];	 // 原陣列 插入陣列 

void InsertSort(int x) { // 插入 x 
  int pos = 0;	         // 記錄 x 應插入的位置 
  
  while (pos < cnt && r[pos] < x) pos++;
        		 // 直到找到大於等於 x 的數 
  for (int i = cnt; i > pos; i--)
  	r[i] = r[i-1];
                         // 後移陣列 
		
  r[pos] = x;
  cnt++;		 // 插入陣列長度加一 
}

空間優化 code

點選檢視程式碼
int n;
int a[10005];

void InsertSort() {
 for (int i = 0; i < n; i++) {
 	int pos = 0, x = a[i];
	while (pos < i && a[pos] < a[i]) pos++;		
	for (int k = i; k > pos; k--)
	    a[k] = a[k-1];
	
	a[pos] = x;
   }
} 

氣泡排序

普 code

點選檢視程式碼
void bubble_sort(int* a, int n) {
bool f = 1;
	
while (f) {
	bool f = 0;
	for (int i = 1; i < n; i++)
		if (a[i] > a[i+1]) swap(a[i], a[i+1]), f = 1;
  }
	
return ;
}

常數優化 code

點選檢視程式碼
int n;
int a[10005];

void BubbleSort(int n, int a[]) {
for (int i = 0; i < n; i++) {
	for (int j = 0; j < n - i - 1; j++) {
		if (a[j] > a[j+1]) swap(a[j], a[j+1]);
	}
  }
}

選擇排序

普 code

點選檢視程式碼
int n;
int a[10005];

void SelectSort(int n, int a[]) {
	for (int i = 0; i < n; i++) {
		int key = i;
		
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[key]) key = j;
			
		swap(a[i], a[key]);
	}
}

優化 code

點選檢視程式碼
int n;
int a[10005];

void SelectSort(int n, int a[]) {
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[i]) swap(a[j], a[i]);
	}
}

複雜度

時間複雜度

插入排序

O (n ^ 2)

氣泡排序

O (n ^ 2)

選擇排序

O (n ^ 2)

實用排序

歸併排序

O (n log n)

code

點選檢視程式碼
int n;
int a[10005], t[10005];        // a 原陣列 t 排序陣列 

void MergeSort(int l, int r) {
	if (l == r - 1) return ;
	
	int mid = (l + r) >> 1;
	
	MergeSort(l, mid); MergeSort(mid, r);
	
	int p = l, q = mid, k = l;
	
	while (p < mid && q < r) {
		if (a[p] < a[q]) t[k++] = a[p++];
		else t[k++] = a[q++];
	}
	
	while (p < mid) t[k++] = a[p++]; // 複製剩餘陣列 
	while (q < r) t[k++] = a[q++];
	
	for (int i = l; i < r; i++)
		a[i] = t[i];
}

快速排序

O (n log n)

code

點選檢視程式碼
int n;
int a[10005], t[10005];

void QuickSort(int l, int r) {
	if (l >= r - 1) return ;
	
	int flag = a[rand() % (r - l) + l];
	int p = l, q = r;
	
	for (int i = l; i < r; i++) {
		if (a[i] < flag) t[p++] = a[i];
		else if (a[i] > flag) t[--q] = a[i];
	}
	
	for (int i = p; i < q; i++) // 複製剩下等於 flag 的數 
		t[i] = flag;
		
	for (int i = l; i < r; i++)
		a[i] = t[i];
		
	QuickSort(l, p);
	QuickSort(q, r);
}