欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 5.C_Demo_排序

5.C_Demo_排序

2024/10/24 1:51:19 来源:https://blog.csdn.net/Fresh_man111/article/details/140891651  浏览:    关键词:5.C_Demo_排序

冒泡排序法

原理:

依次比较相邻的两个元素,如果顺序错误就交换。

思路:

这种方法,显然需要很多轮才能完成,每一轮只能排序一个最大值或最小值(第一层for),将全部的数据排序完成,需要很多轮(第二层for)。

对于第一层for,就是遍历数组,然后比较大小,进行交换。有两个注意点:

  • 效率:第一次排序完成之后,末尾就已经是最值了,下一次可以不再比较末尾这个数字。
  • 越界:比如数组大小为5,要比较的实际是a[i]与a[i+1],因此i+1要小于5,不能越界

对于第二层for,就是考虑需要比较多少次。有两个注意点:

  • 次数:有5个数,找出4个最值就可以进行排序了,而不是需要找5次。
  • 效率:当第一层for没有进行排序时,代表这个数组已经排序好了,这时可以直接break。

代码接口说明如下:

1、void BubbleSortArray(char* array,int size,char mode);

功能:使用冒泡排序法进行排序

array:数组首地址

size:数组大小

mode:排序模式,' U '代表升序排序,' D '代表降序排序

2、void Print_Array(char* array,int size)

打印调试代码

具体代码实现如下:

#include <stdio.h>void BubbleSortArray(char* array,int size,char mode){int i,j;char SortFinishFlag = 1;if(array == NULL){printf("err:array is NULL\n");return;}//1.找到size-1个最大/小值,即可进行排序 for(j=0;j<size-1;j++){//2.比到上一个排到的末尾即可 for(i=0;i<size-1-j;i++){switch(mode){case 'U'://升序排序,小数在低位 if(array[i]>array[i+1]){array[i]   = array[i]^array[i+1];array[i+1] = array[i]^array[i+1];array[i]   = array[i]^array[i+1];SortFinishFlag = 0;}	break;case 'D'://降序排序,大数在低位if(array[i]<array[i+1]){array[i]   = array[i]^array[i+1];array[i+1] = array[i]^array[i+1];array[i]   = array[i]^array[i+1];SortFinishFlag = 0;} break;default:printf("mode err\n");return;}}printf("Debug:MaxLoopNum = %d,NowLoopNum = %d\n",size-1,j);//数据无交换,提前退出 if(1 == SortFinishFlag){break;	}else{SortFinishFlag = 1;		} 	}	
}
/* 打印数组 */ 
void Print_Array(char* array,int size){int i;for(i=0;i<size;i++){printf("%d ",array[i]);}
}int main(){char a[]={1,2,3,4,5};BubbleSortArray(a,sizeof(a)/sizeof(char),'U');Print_Array(a,sizeof(a)/sizeof(char));return 0;
} 

简单排序法

原理:

始终用未排序的第一个进行比较,依次与后面的值进行比较,如果顺序错误就交换。

代码接口说明如下:

1、void SimpleSelectSortArray(char* array,int size,char mode);

功能:使用冒泡排序法进行排序

array:数组首地址

size:数组大小

mode:排序模式,' U '代表升序排序,' D '代表降序排序

2、void Print_Array(char* array,int size)

打印调试代码

具体代码实现如下:

#include <stdio.h>void SimpleSelectSortArray(char* array,int size,char mode){int i,j;char SortFinishFlag = 1;if(array == NULL){printf("err:array is NULL\n");return;}for(i=0;i<size-1;i++){for(j=i+1;j<size;j++){switch(mode){case 'U'://升序,小数放低位 if(array[i]>array[j]){array[i] = array[i] ^ array[j];array[j] = array[i] ^ array[j];array[i] = array[i] ^ array[j];SortFinishFlag = 0;} break;case 'D'://降序,大数放低位if(array[i]<array[j]){array[i] = array[i] ^ array[j];array[j] = array[i] ^ array[j];array[i] = array[i] ^ array[j];SortFinishFlag = 0;}break;default:printf("mode err"); }}printf("Debug:MaxLoopNum = %d,NowLoopNum = %d\n",size-1,i);//数据无交换,提前退出 if(1 == SortFinishFlag){break;	}else{SortFinishFlag = 1;		} 		}
}
/* 打印数组 */ 
void Print_Array(char* array,int size){int i;for(i=0;i<size;i++){printf("%d ",array[i]);}
}
int main(){char a[]={1,2,3,4,5,6,7,8,9};SimpleSelectSortArray(a,sizeof(a)/sizeof(char),'U');Print_Array(a,sizeof(a)/sizeof(char));return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com