文章
14
粉丝
0
获赞
137
访问
4.1k
#include <stdio.h>
typedef struct Num{
int data;
int flag;
}Num;
//排序
void B_Sort(Num nums[],int n){
int i,j,index;
Num temp;
for(i=0;i<n-1;i++){
index = 1;
for(j=0;j<n-1-i;j++){
if((nums[j].flag!=nums[j+1].flag) && (nums[j].data>nums[j+1].data)){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
&...
登录后发布评论
根据题目要求,我们需要判断是否可以通过交换属性不同的元素使得数组有序。关键在于以下两个条件:
如果所有元素的属性相同:此时无法进行任何交换,因此数组必须已经是升序的才能输出"Yes"。
存在两种不同的属性:无论原数组如何,都可以通过交换将数组排序,因此直接输出"Yes"。
原代码使用冒泡排序并检查排序后的数组是否有序,这在时间复杂度(O(n²))和逻辑上存在问题。正确的做法是直接根据上述两个条件进行判断,无需实际排序。
代码解释
isSorted函数:检查数组是否已经是升序排列。
allSame函数:检查所有元素的属性是否全为0或全为1。
主逻辑:
首先检查原数组是否已经有序,若是则直接输出"Yes"。
若数组无序,检查属性是否全相同。若全相同则输出"No",否则输出"Yes"(因为存在两种属性,可通过交换排序)。
该方法时间复杂度为O(n),能够高效处理题目中的最大数据规模。