複習1.各種排序

1.快排

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a) {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
}

int find_base_number(vector<int> &arr, int L, int R) {
	int i = L;
	int j = R;

	int temp = arr[L];//初始化基準數

	while (i < j) {
		while (i<j && arr[j]>=temp)//從右往左找第一個小於空位的元素
		{
			j--;
		}
		arr[i] = arr[j];

		while(i<j && arr[i]<=temp)//從左往右找第一個大於空位的元素
		{
			i++;
		}
		arr[j] = arr[i];
	}

	//跳出來時i=j
	arr[i] = temp;
	return i;
}


void magic_sort(vector<int> &arr, int L, int R) {
	if (L >= R) return;
	int i = find_base_number(arr,L,R);//找基準數
	magic_sort(arr, L, i - 1);
	magic_sort(arr, i + 1, R);
}


void main() {
	vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
	print(arr);

	int l = 0;
	int r = arr.size() - 1;

	magic_sort(arr, l, r);
	print(arr);
	system("pause");
}

2.歸併排序

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a) {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
}


void fun(vector<int> &arr, int L, int R, int mid, vector<int> &temp) {
	int i_1 = L;
	int j_1 = mid;
	int i_2 = mid + 1;
	int j_2 = R;

	int flag = 0;

	while (i_1 <= j_1 &&i_2 <= j_2) {
		if (arr[i_1] < arr[i_2]) {
			temp[flag++] = arr[i_1++];
		}
		else {
			temp[flag++] = arr[i_2++];
		}
	}

	while (i_1 <= j_1) {
		temp[flag++] = arr[i_1++];
	}
	while (i_2 <= j_2) {
		temp[flag++] = arr[i_2++];
	}
	for (int i = 0; i < flag; i++) {
		arr[L + i] = temp[i];
	}

}

void magic_sort(vector<int> &arr, int L, int R,vector<int>& temp) {
	if (L >= R)return;
	int mid = L + (R - L) / 2;
	magic_sort(arr, L, mid,temp);
	magic_sort(arr, mid + 1, R,temp);

	fun(arr, L, R, mid, temp);
}

void main() {
	vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
	print(arr);

	int l = 0;
	int r = arr.size() - 1;

	vector<int> temp(arr.size());
	magic_sort(arr, l, r,temp);

	print(arr);
	system("pause");
}

3.冒泡

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a) {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
}



void main() {
	vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
	print(arr);


	for (int i = 0; i < arr.size(); i++) { //表示趟數
		for (int j = arr.size() - 1; j > i; j--) {
			if (arr[j] < arr[j - 1]) {
				swap(arr[j], arr[j - 1]);
			}
		}
	}

	print(arr);
	system("pause");
}

4.選擇

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a) {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
}



void main() {
	vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
	print(arr);


	for (int i = 0; i < arr.size(); i++) { //表示趟數
		int temp = i;
		for (int j = i + 1; j < arr.size(); j++) {
			temp = (arr[temp] < arr[j]) ? temp : j;	
		}
		if (temp != i) {
			swap(arr[temp],arr[i]);
		}
	}

	print(arr);
	system("pause");
}

5.插入排序

#include<iostream>
#include<vector>

using namespace std;

void print(vector<int> a) {
	for (int i = 0; i < a.size(); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
}



void main() {
	vector<int> arr = { 0,9,1,5,8,3,7,4,6,2 };
	print(arr);


	for (int i = 1; i < arr.size(); i++) {
		int temp = arr[i];
		int j;
		for (j = i; j >= 0 && arr[j - 1] > temp; j--) {
			arr[j] = arr[j - 1];
		}
		arr[j] = temp;
	}


	print(arr);
	system("pause");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章