冒泡排序,选择排序,插入排序

需求*
有数组a[]={1,3,7,5,8}
将其按前大后小排序
参考文章:
http://blog.csdn.net/ygc87/article/details/7208082


********冒泡和选择异同*****
区别在于:冒泡算法,每次比较如果发现较小的元素在后面,就交换两个相邻的元素。而选择排序算法的改进在于:先并不急于调换位置,先从A[1]开始逐个检查,看哪个数最小就记下该数所在的位置P,等一躺扫描完毕,再把A[P]和A[1]对调,这时A[1]到A[10]中最小的数据就换到了最前面的位置。

所以,选择排序每扫描一遍数组,只需要一次真正的交换,而冒泡可能需要很多次。比较的次数是一样的。


冒泡排序:
《1》原理:取相邻的两个数,比大小,前大后,不动,否则,前后换位,
每一轮都从数组第一位开始,与之后地比较,作用是将最小的找出来放到最后。
第二轮找到倒数第二小的,放倒数第二位。以此类推,总共要找数组-1轮,
每轮比较数组-1次。
《2》写法
《2.1》单轮
for( ){
for(int i=0;i if(a[i] int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
《2.2》多轮:
for( int j=i+1; j for(int i=0;i if(a[i] int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
************************分割线*********************
选择排序:
《1》原理:每次比较取出最大值的下标,在该轮完成后,将最大值与地0位交换,以后位每轮位该轮数-1位交换。

每一轮将每个位置作比较,找到最大的,记住他的位置将,他放在第一个,并吧原来第一个的数据交换。
进行length-1轮即可完成。
《2.1》
单轮;
for(int i=0;i if(a[i] //先记录位置。得到最大值的那个位置
int maxindex=i+1;

 }

//然后将两者替换
int temp=a[0];
a[o]=a[maxindex];
a[maxindex]=a[temp];
}
《2.2》
多轮
for(int j=0,j int maxindex=j;
for(int i=j+1;i if(a[maxindex] //先记录位置。得到最大值的那个位置
maxindex=i;

     }
//然后将两者替换
int  temp=a[0];
a[j]=a[maxindex];
a[maxindex]=a[temp];

}

}
************************************分割线**********************
插入排序

原理:
新建一个有序数组,每一轮取无序数组的第一个,与有序数组的从后往前每一个做比较,找出最大值,根据大小来做处理。

你可能感兴趣的:(冒泡排序,选择排序,插入排序)