第一次使用这个编辑器好好用
醉了。。。刚写了一篇,结果不小心给关了,还要重新写。。。
- 冒泡排序
放空了这么就,终于知道自己该干什么,找到实习之后这又是一个新的开始,不要羡慕别人,因为你在别人眼里也是独一无二的言归正传,我是用Java写的冒泡排序,虽然冒泡排序是排序算法里面比较简单的,但是自己写出来之后还是很有成就感的。
在写的过程中遇到的问题就是swap方法的调用问题,一定要类型相同才能调用
冒泡排序的思想:比较相邻的两个数,如果前一个比后一个大,则将其交换位置。
Java代码如下:
package sort;
public class BubbleSort {
//第一种方法完全就是按照冒泡排序的定义来写的
//代码完全没有经过优化
public void Bubble1(int[]a,int n){
int i,j;
for(i=0;i<n-1;i++){
for(j=1;j<n-i;j++){
if(a[j-1]>a[j]){
swap(a,j-1,j);
//int k;
//k=a[j-1];
//a[j-1]=a[j];
//a[j]=k;
}
}
}
}
//第二种方法代码优化一下 写一个标志位,如果一趟下来发生交换则标志为true,如果未发生交换,为false
//则代表排序已完成
public void Bubble2(int[]a,int n){
int u,v;
boolean flag;
flag=true;
while(flag){
flag=false;
for(u=0;u<n-1;u++){
for(v=1;v<n-u;v++){
if(a[v-1]>a[v])
swap(a,v-1,v);
}
flag=false;
}
}
}
//第三种方法,如果有一个50个数的数组,仅前面10个数是无序的,后面40个数是有序的,并且大于前面10个数,那么
//第一次排序后,最后发生交换的位置必小于10,且这个位置之后的数据必定是有序的,记录下这个位置后,
//以后遍历就从头到这个位置就可以了
public void Bubble3(int[]a,int n){
int p,q;
int flag1=n;
while(flag1>0){
q=flag1;
flag1=0;
for(p=1;p<q;p++){
if(a[p-1]>a[p])
swap(a,p-1,p);
flag1=p;
}
}
}
public void swap(int a[],int p,int q ){
int k;
k=a[p];
a[p]=a[q];
a[q]=k;
}
}