冒泡排序和双向冒泡

冒泡排序和一点小应用

首先是冒泡排序的算法回顾:


#include 
#include 
const int N = 10010;
using namespace std;


int main()
{
	int n = 0;
	cin >> n;
	int arr[N];
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	int  t = 0;
	while (t < n) {
		for (int i = 0; i < n - 1-t; i++) {
			if (arr[i] > arr[i + 1])
				swap(arr[i], arr[i + 1]);
		}
		t++;
	}
	for (int i = 0; i < n; i++) {
		printf("%d ", arr[i]);
	}
	return 0;

}
/*
8
1 5 3 6 8
*/

据说这个叫做双向冒泡?
编写双向冒泡排序算法,在正反两个方向交替进行扫描,即第一趟把关键字最大的元素 放在序列的最后面 ,第二趟把关键字最小的元素放在序列的最前面,如此反复进行.

#include 
#include 
const int N = 10010;
using namespace std;


int main()
{
	int n = 0;
	cin >> n;
	int arr[N];
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	int  t = 0;
	while (t < n/2) {
		int i = t;
		for (i=t; i < n - 1-t; i++) {
			if (arr[i] > arr[i + 1])
				swap(arr[i], arr[i + 1]);
		}
		for (i; i > 0; i--) {
			if (arr[i] < arr[i - 1]) {
				swap(arr[i], arr[i - 1]);
			}
		}
		t++;
	}
	for (int i = 0; i < n; i++) {
		printf("%d ", arr[i]);
	}
	return 0;

}
/*
8
6 5 3 9 4 6 1 5
1 3 4 5 5 6 6 9
*/

你可能感兴趣的:(c++,算法)