C++排序算法实现

选择排序

#include <iostream>
using namespace std;
int a[100];
void Select_Sort(int a[], int n) {
	int k,t=0;
	for (int i = 0; i < n - 1; i++) {
		k = i;
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[k])k = j;//找到数值最小的下标
	    t = a[k]; a[k] = a[i]; a[i] = t;
	}
}
int main() {
	int n, t;
	cin >> n;
	for (int p = 0; p < n; p++)
		cin >> a[p];
	Select_Sort(a, n);
	for (int k = 0; k < n; k++)
		cout << a[k] << " ";
	return 0;
}

冒泡排序

#include <iostream>
using namespace std;
int a[100];
void Bubble_Sort(int a[], int n) {
	int t;
	bool flag = 1;//优化
	for (int i = 0; i < n - 1; i++) {
		for (int j = 0; j < n - i; j++)//每次冒泡的比较次数
			if (a[j + 1] < a[j]) {
				t = a[j + 1]; a[j + 1] = a[j]; a[j] = t;
				flag = 0;
			}//<则升序排列,>则降序排列
		if (flag)break;
	}//有多少个数就需
}
int main() {
	int n;
	cin >> n;
	for (int p = 0; p < n; p++)
		cin >> a[p];
	Bubble_Sort(a, n);
	for (int k = 0; k < n; k++)
		cout << a[k] << " ";
	return 0;
}

快速排序

int a[101] = { 0 };
void quicksort(int left, int right)
{
	int i, j, t, temp;
	if (left > right)
		return;
	temp = a[left];  //temp中存的就是基准数
	i = left;
	j = right;
	while (i != j)
	{
		//顺序很重要,要先从右往左找
		while (a[j] >= temp && i < j)
			j--;
		//再从左往右
		while (a[i] <= temp && i < j)
			i++;
		//交换两个数在数组中的位置
		if (i < j) //当i和j没有相遇时
		{
			t = a[i];
			a[j] = a[i];
			a[j] = t;
		}
	}
	//最终将基准数归位
	a[left] = a[i];
	a[i] = temp;
	quicksort(left, i - 1);  //继续处理左边的,这里是一个递归的过程
	quicksort(i + 1, right);  //继续处理右边的,这里是一个递归的过程
}
发布了23 篇原创文章 · 获赞 31 · 访问量 1110

猜你喜欢

转载自blog.csdn.net/weixin_45333771/article/details/103341162
今日推荐