冒泡排序
理论: 从第一个数开始,将相邻的两个数比较,第一个数和第二个数比较.....,要是是从小到大的排序,要是后面的数比前面的大则交换两个的位置,这样第一轮比较基数后最大的数就到了最后面,接着进行第二趟的比较,比较到前面N-1个数,原理也是前面的那样,大的往后面不停的排,直到比较到前面只剩下一个数的时候,就完成了排序,这就是冒泡的原理:
下面用这个图代表一下伪代码,画一下流程,说实话,在学校学习的时候,我连这个图都不理解!

冒泡排序的代码:
#include "stdio.h"
#define N 10
int main(){
int a[N];
int i,j,t;
printf("请输入您要排序的%d 数字\n",N);
/*输入十个数*/
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*冒泡*/
for(j=0;j<N-1;j++){
for(i=0;i<N-j;i++){
if(a[i] > a[i+1]){
t = a[i];
a[i] = a[i+1];
a[i+1] = t; }}}
printf("排序的结果是:");
for(i=0;i<N;i++){
printf("%d ",a[i]);
}
}
下面是写的过程中出现的错误分析:

选择排序
理论:这个选择排序一起在上学的时候,感觉就是死脑子,就是有点转不过来弯,就是不理解,说的感觉大学白上了,我故事是被大学白上了,被玩了四年出来发现自己啥都不懂,哈哈哈。。。可能是那时候笨吧,现在说说这个原理,选择排序,就像是打擂台一样,我们先选第一个位置的数为基准位置,后面的一个一个挑战,(比如我们从小到大排序),要是第二个数比第一个数小,则换擂主,第三个比第二个又小,再换,直到一轮比赛结束,找到最小的在前面,接着我们开始第二轮,第二轮以第二个数为基准。后面的一次比较。。直到最后一个数,这样就整个排序过程出来了,无聊在画个图:

下面是基本的代码部分:
#include "stdio.h"
#define N 10
int main( ){
int i,j,t,k;
int a[N];
printf("请输入你要排序的%d个整数",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*注意这里不能写成N 不然下面的 j 会越界*/
for(i=0;i<N-1;i++){
k=i;
for(j=i+1;j<N;j++){
if(a[k]>a[j]) k=j;
}
if(k!=i){
t= a[i];
a[i] = a[k];
a[k] = t;
}
}
printf("最终排序的结果是:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
上面就OK,这里没有什么错,最后看一下结果:

原文:http://www.cnblogs.com/taoxu/p/7389769.html