最近有個想法:工作之余,用c/c++在linux下把常用的算法重寫一遍。當然,對算法的認識,我僅限於皮毛,我不可能超越那些前輩先知,但我仍想,用自己的方式演示一遍,只當自娛自樂吧!秉承一貫的原則,不講大道理,只演示關鍵代碼demo,開始算法之旅的第一個算法-----冒泡排序。
1、編輯文件BubbleSort.c,內如如下:
[cpp] #include <stdio.h>
void bubbleSort(int * pArr, int cnt)
{
int i,j,tmp;
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(*(pArr+i)>*(pArr+j))
{
tmp=*(pArr+i);
*(pArr+i)=*(pArr+j);
*(pArr+j)=tmp;
}
}
}
}
int main(void)
{
int cnt;
printf("input array length:\n");
scanf("%d",&cnt);
if(cnt<1)
{
printf("array length must be larger 0 \n");
return 1;
}
else
{
printf("array length is %d \n",cnt);
}
int a[cnt];
int i;
for(i=0;i<cnt;i++)
{
printf("input arr[%d] value\n",i);
scanf("%d", &a[i]);
}
bubbleSort(a,cnt);
printf("bubblesort result:\n");
for(i=0;i<cnt;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
void bubbleSort(int * pArr, int cnt)
{
int i,j,tmp;
for(i=0;i<cnt;i++)
{
for(j=i+1;j<cnt;j++)
{
if(*(pArr+i)>*(pArr+j))
{
tmp=*(pArr+i);
*(pArr+i)=*(pArr+j);
*(pArr+j)=tmp;
}
}
}
}
int main(void)
{
int cnt;
printf("input array length:\n");
scanf("%d",&cnt);
if(cnt<1)
{
printf("array length must be larger 0 \n");
return 1;
}
else
{
printf("array length is %d \n",cnt);
}
int a[cnt];
int i;
for(i=0;i<cnt;i++)
{
printf("input arr[%d] value\n",i);
scanf("%d", &a[i]);
}
bubbleSort(a,cnt);
printf("bubblesort result:\n");
for(i=0;i<cnt;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
2、編譯程序
[plain] [root@localhost gcc]# gcc -o BubbleSort BubbleSort.c
[root@localhost gcc]# gcc -o BubbleSort BubbleSort.c
3、執行
[plain] [root@localhost gcc]# ./BubbleSort
input array length:
3
array length is 3
input arr[0] value
2
input arr[1] value
1
input arr[2] value
4
bubblesort result:
1 2 4
[root@localhost gcc]# ./BubbleSort
input array length:
3
array length is 3
input arr[0] value
2
input arr[1] value
1
input arr[2] value
4
bubblesort result:
1 2 4
呵呵,用自己的手,親自再演示一遍,感覺還是不錯的!先這樣吧,以後不斷補充完善這篇文章。希望,自己能堅持下去。
摘自 心靈淨土