选择排序和冒泡排序

选择特点:和同一个数比较,最后交换
简单选择排序:不断把最小值放到最前面

void SelectSort(int A[], int n){
	int i, j, min;	//min是最小值下标
	for(i=0; i<n; i++){
		min = i;
		for(j=i+1; j<n; j++)
			if(A[j]<A[min])
				min = j;
		if(min!=i)
			swap(A[i], A[min]);
	}
}

双向选择排序:不断把最大的放在最后,最小的放到最前面

void SelectDoubleSort(int A[], int n){
	int i, j, min, max, n1;
	n1 = n;
	for(i=0; i<n1; i++){
		min = i;
		max = n1-1;
		for(j=i+1; j<n1; j++){
			if(A[j]<A[min])
				min = j;
			if(A[j]>A[max])
				max = j;
		}
		if(min!=i)
			swap(A[i], A[min]);
		if(max!=n1-1){
			swap(A[n1-1], A[max]);
			n1--;
		}
	}
}

冒泡特点:邻近比较,即时交换
单向冒泡排序

void BubbleSort(int A[], int n){
	int i, j;
	bool flag ;
	for(i=0; i<n-1; i++){
		flag = false;
		for(j=n-1; j>i; j--)
			if(A[j-1]>A[j]){
				flag = true;
				swap(A[j-1], A[j]);
			}
		if(flag==true)
			return;
	}
}

双向冒泡排序

void BubbleDoubleSort(int A[], int n){
	int l, r;
	int i, j;
	l=0; r=n-1;
	while(l<r){
		for(i=l; i<r; i++)
			if(A[i]>A[i+1])
				swap(A[i], A[i+1]);
		r--;
		for(j=r-1; j>=l; j--)
			if(A[j-1]>A[j])
				swap(A[j-1], A[j]);
		l++;
	}
}

完整代码

#include <iostream> 
#include <cstdlib>
using namespace std;
void print(int A[]) {
	int i;
	for(i=0; i<5; i++)
		cout << A[i] << " ";
	cout << endl;
	system("pause");
}
void SelectSort(int A[], int n){
	int i, j, min;	//min是最小值下标
	for(i=0; i<n; i++){
		min = i;
		for(j=i+1; j<n; j++)
			if(A[j]<A[min])
				min = j;
		if(min!=i)
			swap(A[i], A[min]);
	}
}
void SelectDoubleSort(int A[], int n){
	int i, j, min, max, n1;
	n1 = n;
	for(i=0; i<n1; i++){
		min = i;
		max = n1-1;
		for(j=i+1; j<n1; j++){
			if(A[j]<A[min])
				min = j;
			if(A[j]>A[max])
				max = j;
		}
		if(min!=i)
			swap(A[i], A[min]);
		if(max!=n1-1){
			swap(A[n1-1], A[max]);
			n1--;
		}
	}
}
void BubbleSort(int A[], int n){
	int i, j;
	bool flag ;
	for(i=0; i<n; i++){
		flag = false;
		for(j=n-1; j>i; j--)
			if(A[j-1]>A[j]){
				flag = true;
				swap(A[j-1], A[j]);
			}
		if(flag==false)
			return;
	}
}
void BubbleDoubleSort(int A[], int n){
	int l, r;
	int i, j;
	l=0; r=n-1;
	while(l<r){
		for(i=l; i<r; i++)
			if(A[i]>A[i+1])
				swap(A[i], A[i+1]);
		r--;
		for(j=r-1; j>=l; j--)
			if(A[j-1]>A[j])
				swap(A[j-1], A[j]);
		l++;
	}
}
int main(){
	int i;
	int A[5];
	for(i=0; i<5; i++){
		A[i] = rand()%100;
	}
	
	for(i=0; i<5; i++)
		cout << A[i] << " ";
	cout << endl;
//	SelectSort(A, 5);
//	BubbleDoubleSort(A, 5);
//	SelectDoubleSort(A, 5);
	BubbleSort(A, 5);
	for(i=0; i<5; i++)
		cout << A[i] << " ";
	cout << endl;
	return 0;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值