1。冒泡排序冒泡排序(bubblesort)是C语言入门级的一种简单排序算法。它反复访问要排序的元素列,并比较两个相邻的元素,如果顺序错误则交换。反复检查比较,直到不需要交换相邻元素为止,即元素列已经排序完毕。该算法的名称来源于较小(较大)的元素会通过交换慢慢“浮”到序列的顶部(按升序或降序排列),就像水中的气泡最终会浮到顶部一样,因此得名“冒泡排序”。算法说明1.比较相邻元素。如果第一个比第二个大,交换2。对每对相邻的元素做同样的事情,从开始的第一对到最后的最后一对,这样最后一个元素应该是最大的数3,对所有元素重复以上步骤,除了最后4个。重复步骤1~3,直到排序完成源码#include#defineARRAY_SIZE15voidlog(char*head,int*data,intlen){unsignedchari;printf("%s:",head);for(i=0;idata[j+1])//相邻元素对{temp=data[j+1];//元素交换data[j+1]=data[j];data[j]=temp;}}}}intmain(void){intdata[ARRAY_SIZE]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};log("source",data,ARRAY_SIZE);bubble_sort(data,ARRAY_SIZE);log("sort",data,ARRAY_SIZE);return0;}运行结果source:034438054715362627024604195048sort:020304051519262736384446474850简单直观的排序算法,先找到未排序序列中最小(最大)的元素,存入已排序序列的起始位置,然后继续从剩余未排序元素中寻找最小(最大)元素,然后放入它在排序序列的末尾。依此类推,直到所有元素都排序完毕。算法说明1.初始状态下,数据属于无序区,有序区为空。2.从无序区域中选择最小的元素,与无序区域中的第一个元素交换。3、然后从乱的地方开始。重复步骤2,直到无序区域为空源码voidselection_sort(int*data,intsize){inti,j,temp;intmin;for(i=0;i=0&&data[pre]>current)//当前元素与有序区域逐一比较后插入{data[pre+1]=data[pre];pre--;}data[pre+1]=current;}}4.第一个标准库函数qsort的三种排序算法都是只是针对单个元素进行排序,但是在实际应用中,一个大的结构是根据某个值进行排序的,比如wifi信息结构的数组,包括读取其mac、名称、加密信息、信号强度,wifi信息按照信息强度排序进行排序,每次数据交换意味着两次内存拷贝。在这种情况下,选择排序稍微好一些。比起自己造轮子,C语言标准库函数可能更合适;qsort函数是C语言自带的排序函数,包含在.函数原型voidqsort(void*base,size_tnitems,size_tsize,int(*compar)(constvoid*,constvoid*))base-指针,要排序的数组的第一个元素nitems-数组中元素的个数size-每个元素数组中元素的大小(以字节为单位)compare-基于此函数比较两个元素返回:Value不返回任何值缺点:对于具有多个重复值的数组效率较低不稳定的示例//qsort需要Combinecomparewithintcompare(constvoid*value1,constvoid*value2){//这里调整升序或降序return(*(int*)value1-*(int*)value2);}intmain(void){intdata[ARRAY_SIZE]={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};log("source",data,ARRAY_SIZE);qsort(data,ARRAY_SIZE,sizeof(int),比较);日志(“排序”,数据,ARRAY_SIZE);return0;}其效果与前面三种算法相同,可以扩展为对结构体中某个元素的整体值进行排序,满足前面wifi信息按信号强度排序的需要。#include#defineWIFI_AP_MAX5typedefunsignedcharuint8_t;typedefsignedcharint8_t;typedefunsignedshortuint16_t;typedefsignedshortint16_t;typedefunsignedintuint32_t;typedefstruct{uint32_tbssid_low;//macaddresslowuint16_tbssid_high;//macaddresshighuint8_tchannel;//channelidint8_trssi;//signalstrength}wifiApInfo_t;//qsort要结合compare使用,信号强度rssi升级列表intcompare(constvoid*value1,constvoid*value2){constwifiApInfo_t*ctx1=(constwifiApInfo_t*)value1;constwifiApInfo_t*ctx2=(constwifiApInfo_t*)value2;return(ctx1->rssi-ctx2);}staticwifiApInfo_twifiApInfo[WIFI_AP_MAX]={{0x5555,0x55,5,-55},{0x1111,0x11,1,-51},{0x3333,0x33,3,-53},{0x4444,0x44,4,-54},{0x2222,0x22,2,-52},};voidwifi_log(char*head,void*data,intsize){unsignedchari;constwifiApInfo_t*wifi=(wifiApInfo_t*)data;printf("%s:\r\n",head);for(i=0;i