C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)

#include
#include
#include
#include
#include 
using namespace::std;

class Solution {
public:
	//直接插入排序
	void insertsort(vector& num) {
		for (int i = 1; i < num.size(); i++) {
			int tmp = num[i], j = i - 1;			//tmp为监视哨
			while (j>=0&&tmp < num[j]) {			//j要防止越界
				num[j + 1] = num[j];			//比tmp大的数都向右挪一个位置
				j--;
			}
			num[j + 1] = tmp;			//tmp最后放在比它小的数的右边
		}
	}

	//冒泡排序(小数上浮)
	void bubblesort(vector& num) {
		int i, j;
		for (i = 0; i < num.size()-1; i++) {			//num[i]存放上浮的最小数
			for (j = num.size() - 1; j > i; j--) {			//j>i,保证每一轮最后比较的是num[i]和num[i+1]
				if (num[j] < num[j - 1]) swap(num[j], num[j - 1]); 
			}
		}
	}

	//快速排序
	int traversal(vector& num, int l, int r) {
		int tmp = num[l];
		int i = l, j = r;
		while (i < j) {
			while (num[j] > tmp && i < j) j--;
			if (num[j] < tmp && i < j) {
				num[i] = num[j];
			}
			while (num[i] < tmp && i < j)i++;
			if (num[i] > tmp && l < j) {
				num[j] = num[i];
			}
			num[i] = tmp;
		}
		return i;
	}
	void quicksort(vector& num, int l, int r) {
		if (l < r) {
			int mid = traversal(num, l, r);
			quicksort(num, l, mid - 1);
			quicksort(num, mid + 1, r);
		}
	}

	//选择排序
	void selectsort(vector& num) {
		for (int i = 0; i < num.size() - 1; i++) {
			int min = i;
			for (int j = i + 1; j < num.size(); j++) {
				if (num[j] < num[min]) {
					min = j;
				}
			}
			swap(num[i], num[min]);
		}
	}
};

int main() {
	vector num{ 5, 8, 9, 6, 2 };
	Solution sort;
	//sort.insertsort(num);
	//sort.bubblesort(num);
	//sort.selectsort(num);
	sort.quicksort(num, 0, num.size()-1);
	for (auto n : num) {
		cout << n << ' ';  
	}
	cout << endl;  
}

C++实现直接插入排序、冒泡排序、快速排序、选择排序(含调试程序)_第1张图片
快速排序最好最通用

你可能感兴趣的:(数据结构,c++,算法,开发语言)