实验7-3-10 删除重复字符 (20分) && 数据结构排序算法复习

2 篇文章 0 订阅
1 篇文章 0 订阅

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

代码示例:

#include<stdio.h>
#include<string.h>

int main()
{
    char str[80],comp[80],temp;
    int i=1,j=1,s=0,tag = 0,min;
	while(s<80){
		str[s] = ' ';
		comp[s] = ' ';
		s++;
	}//完成初始化;
    
    gets(str);
    comp[0] = str[0];
    
    while(str[i]!='\0'){
        for(int k=0;k<j;k++){
			if(str[i]==comp[k]) {tag = 1; break;}//如果存在相等退出循环.tag=1表示元素有重复;
        }
		if(tag==0){
			comp[j] = str[i];
			j++;
		}
        i++;
		tag = 0;
    }//将原数组中无重复元素选出;

/*****************************************    选择排序   ***********************************************/
    
// 	for(int n=0;n<j;n++){
//         min = n;
//         for(int m=n;m<j;m++){if(comp[m]<comp[min]) min=m;}//标记到最小元素m
//         temp = comp[n];
//         comp[n] = comp[min];
//         comp[min] = temp;
//     }//1.简单选择排序:时间复杂度:O(n^2);空间复杂度O(1);不稳定;
//     	for(int t =0;t<j;t++){
        printf("%c",comp[t]);
    }//输出
    
//小根堆为例:
//     for(int k=j;k>0;k--){
//         comp[k] = comp[k-1];
//     }//将数组从0开始排列变为从1开始;
//     for(int t=0;t<j;t++){
//         for(int n=(j-t)/2;n>0;n--){
// 			if((j-t)%2!=0){
// 				if(comp[2*n]<comp[2*n+1]){
// 					if(comp[2*n]<comp[n]){
// 						temp = comp[2*n];
// 						comp[2*n] = comp[n];
// 						comp[n] = temp;
// 					}//如果左子树大于根节点,对左子树与根节点进行互换;
// 				}//左子树比右字树小
// 				else{
// 					if(comp[2*n+1]<comp[n]){
// 						temp = comp[2*n+1];
// 						comp[2*n+1] = comp[n];
// 						comp[n] = temp;
// 					}//如果右子树大于根节点,对右子树与根节点进行互换;
// 				}//右子树比左子树小  
// 			}
// 			else{
// 				if(comp[2*n]<comp[n]){
// 					temp = comp[2*n];
// 					comp[2*n] = comp[n];
// 					comp[n] = temp;
// 				}
// 			}
// 		}//初始化一趟堆,调整耗时间复杂度O(h);
//         printf("%c",comp[1]);//输出最小元素(栈顶元素)
//         comp[1] = comp[j-t];//将最后一个元素赋值给栈顶
//         comp[j-t] = '\0';//   
//     }//2.堆排序:时间复杂度O(n*log2n);空间复杂度O(1);不稳定;    

/*****************************************    选择排序   ***********************************************/
}

 关于交换排序与插入排序后续有时间会进行补充~

以上代码本菜鸡拙见,欢迎大佬们批评教育~堆排序没按书上写,有一些复杂,,奥利给

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值