关于冒泡问题 我下面写了一篇三种排序方法的思想 和算法 你可以参考一下
插入法排序:插入法排序的中心思想是将待排序的记录(元素)逐个进行处理,即将待排序的一个新记录与前面已经排好序的进行比较,然后插入到适当的位置中。核心特点:被插入的序列已经排好序这样一旦找到第一不满足条件的记录就不用继续往下遍历了。 冒泡排序:冒泡排序的思想是不断比较相邻的两个记录的值,如果不满足要求则交换相邻的记录,直到所有记录排好序。 直接选择排序:逐个找到第n小的记录,并将这个记录放入到数组的第n个位置中,与冒泡排序不相同的是选择排序不需要不断交换记录,只是将第n个记录与满足条件的某个记录如第n+m记录交换。 关于他们的描述先就这么写吧 一下是各个排序算法的代码,大家如果有更好的见解欢迎指导交流。 // 插入法排序 public void insert(int a[]){
int temp=0;
for(int i=1;i<a.length;i++){
for (int j = i; j > 0; j--) {
if(a[j]<a[j-1]){
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}else break;
}
}
}
//优化的插入法排序
public void insert2(int a[]){
for (int i = 1; i < a.length; i++) {
int temp=a;
int j=i-1;
while(j>=0&&temp<a[j]){
a[j+1]=a[j];
j--;
}
if(j<i-1){a[j+1]=temp;}
}
} //冒泡排序 public void bubble(int a[]){
for (int i = 1; i < a.length; i++) {
for (int j = a.length-1; j >=i; j--) {
if(a[j]<a[j-1]){
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
} //直接选择排序 public void select(int []a){
int index=0;
int temp=a[0];
for (int i = 0; i < a.length-1; i++) {
temp=a;
index=i;
for (int j = i+1; j < a.length; j++) {
if(a[j]<a[index]){index=j;}
}
a=a[index];
a[index]=temp;
}
} 以上就是三种简单排序的代码 ,第一次写博客也不知道如何写好久墨迹到这里吧,希望大家踊跃交流。 如果对方没有要求用哪种种算法的话我建议你用优化了的插入法排序,这样时间代价会缩短一点。 你的冒泡也有一点缺陷 int[] s = {23,5,12,59,78,21,100,79,66};
for(int j=1;j<=s.length;j++)
{
for(int i=0;i<s.length-1;i++) 有点重复了 因为前面的部分已经排好了就不用再从头开始遍历了,之需要从没有排的部分开始就可以了。
[ 本帖最后由 兰海忠 于 2011-07-26 10:46 编辑 ] |