2008-04-07

C课程上要求的算法

冒泡算法:
  最简单的排序方法是冒泡排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。这个算法可实现如下。

#include<stdio.h>

void bubsort(float* arr,int Count);
int main()
{
float Num[10]={5.0,81.5,94.2,57.2,44.6,648.5,41.2,15.2,48.2,16.6};
bubsort(Num,10);
return 0;
}

void bubsort(float* arr,int Count)
{
short a,b,i;
float temp;
for(a=0;a<Count;a++)
{
for(b=0;b<Count-a-1;b++)
{
if(*(arr+b)<(*(arr+b+1)))
{
temp=*(arr+b);(*(arr+b))=(*(arr+b+1));(*(arr+b+1))=temp;
}
}
}

for(i=0;i<Count;i++)
{
printf("%5.1f\n",arr[i]);
}
}


  这段代码是最简单的冒泡法代码,其作用是将一个数列从大到小排列。在我们的作业中还要求要使用冒泡法来拍一个二维字符数组。可以通过简单的修改这段代码实现:

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

void bubsort(char arr[10][25],int NU);
void swap(char *a,char *b);
int main()
{
char sstr[10][25]={"sdttsdiv","sdtissc","asdi,kf","qwifsad","civje","cvjief","divne","ssdve","dfojeo","ljsijv"};
bubsort(sstr,10);

return 0;
}

void bubsort(char arr[10][25],int NU)
{
int x, y;
char temp[25];
for(y=0;y<NU-1;y++)
{
for(x=1;x<NU-y;x++)
{
if(strcmp(arr[x],arr[x-1])<=0)
{
swap(arr[x],arr[x-1]);
}
}
}
/*sort the arr*/
for(x=0;x<NU-1;x++)
{
printf("%s\n",arr[x]);
}
printf("\n");
}

void swap(char *a,char *b)
{
char tem[25];
strcpy(tem,a);strcpy(a,b);strcpy(b,tem);
}


这种算法是稳定排序法,当遇到相等的情况时会跳过继续排列。
-------------------------------------------------------------------------------------

没有评论: