冒泡排序的思想是从data[1]到data[n-1],如果data[i]比data[i+1]大,则以data[0]为temp位,将两者进行交换,所以一趟比较下来,最大的将会被不停置换到最后一个位置,因为第一趟已将最大的放到最后,所以第二趟只需要比较到data[n-1]即可,以此类推,即可得到冒泡排序得到的结果,所以说如果整个数组恰好是倒序排列,那么冒泡排序的效率将会是最差的,需要进行n-1次排序,即n(n-1)/2次比较,而效果最好便是整个数组恰巧正序排列,一次排序便可以得到有序序列。总的时间复杂度还是
代码如下 :#include <stdio.h>
typedef struct
{
int key;
char name[10];
}Data;
Data ListOld[]={{0,"num0"},{49,"num1"},{38,"num2"},{65,"num3"},{97,"num4"},{76,"num5"},{13,"num6"},{27,"num7"},{49,"num8"}};
void BubbleSort(Data *pdata,int n);
void PrintData(Data *pdata,int n);
int main(int argc, char *argv[])
{
printf("Hello, world\n");
BubbleSort(ListOld,9);
return 0;
}
void PrintData(Data *pdata,int n)
{
int i;
for(i=1;i<n;i++){
printf("%d,%s ",pdata[i].key,pdata[i].name);
}
printf("\n");
}
void BubbleSort(Data *pdata,int n){
int i,j,isExchanged;
for(i=1;i<n-1;i++)
{
for(j=1;j<n-i;j++)
{
if(pdata[j].key>pdata[j+1].key)
{
pdata[0] = pdata[j];
pdata[j] = pdata[j+1];
pdata[j+1] = pdata[0];
isExchanged = 1;
}
}
if(!isExchanged)
break;
}
PrintData(pdata,9);
}