二叉树排序(C++,char型)

#include<iostream>	//二叉树排序(char型,C++)
using namespace std;            //数组下标从1开始
#include<string.h>

void move_char(char a[]) {      //将数组a整体向后移动一位,让a[0]失效
	for (int i = strlen(a); i > 0; i--) {
		a[i] = a[i - 1];
	}
}

void exch_char(char a[], int i, int j) {	//交换a[i]和a[j]的值
	char temp;
	temp = a[i];
	a[i] = a[j];
	a[j] = temp;
}

void swim_char(char a[], int k) {	//上浮第k位置的元素 至合适的位置(树由上到下降序)
	while (k > 1 && a[k / 2] < a[k]) {
		exch_char(a, k / 2, k);
		k = k / 2;
	}
}

void sink_char(char a[], int k, int a_length) {	//下沉第k位置元素,优先与左右孩子中最大的互换位置(树由上到下降序)
	while (2 * k <= a_length) {                 //a_length为数组a去除a[0]后的长度
		int j = 2 * k;
		if (j < a_length && a[j] < a[j + 1]) j++;
		if (!(a[k] < a[j])) break;
		exch_char(a, k, j);
		k = j;
	}
}

void BiTree_sort_char(char a[]) {	//二叉树排序,a_length为数组a去除a[0]后的长度
	int a_length = strlen(a) - 1;
	for (int k = a_length / 2; k >= 1; k--) {	//使二叉树有序(由上到下降序)
		sink_char(a, k, a_length);
	}

	while (a_length > 1) {		//由上到下升序排序
		exch_char(a, 1, a_length--);
		sink_char(a, 1, a_length);
	}
}

int main() {
	char a[100] = {};

	cout << "请输入要排序的字符串:" << endl;
	cin >> a;
	move_char(a);                //a[0]不用

	BiTree_sort_char(a);

	cout << endl;
	cout << "升序后的结果为:" << endl;
	for (int i = 1; i <= strlen(a); i++) {
		cout << a[i] << " ";
	}
	cout << endl;
	return 0;
}

测试结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值