黑马程序员技术交流社区
标题:
给大家分享下冒泡排序整理后的代码
[打印本页]
作者:
孙玉伟
时间:
2012-1-16 10:09
标题:
给大家分享下冒泡排序整理后的代码
/*功能:用Java语言实现冒泡排序
*冒泡排序是稳定的。算法时间复杂度是O(n ^2)
*注:此为优化后的Java冒泡排序代码
*/
public class BubbleSort2 {
public void sort(int[] data){ //定义两个参数,数组首地址与数组大小
int temp;
for(int i=0;i<data.length;i++){ //冒泡,降序:
for(int j=data.length-1;j>i;j--){
if(data[i]<data[j]){ //每个数都比较n次,如果data[i]>data[j]成立,则交换两个数
temp =data[i];
data[i] = data[j];
data[j] = temp;
}
/*以下是打印每一次排序后的序列,与算法无关*/
for(int q=0;q<data.length;q++){
System.out.print(data[q]+" "); //打印每一次排序后的序列
}
System.out.println(); //换行
}
}
}
public static void main(String[] args){
BubbleSort2 bubbleSort2=new BubbleSort2();
int[] a={4,2,3};
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println(" 降序排序");
bubbleSort2.sort(a);
System.out.println(" after sort:");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
}
}
作者:
彭嘉聪
时间:
2012-1-16 13:53
帮你加个标识
方便当数组有一部分已经是排好序的情况下退出循环,以提高效率;
我用伪代码(C语言)写下算法吧
void BubbleSort(SeqList R){//R是待排序文件
int i ,j;
Boolean exchange; //交换标志
for(i = 1;i < n;i++){
exchange = FALSE;
for(j = n-1;j >= i;j--){
if(R[j=1].key < R[j].key ){
R[0]=R[j+1];
R[j+1]=R[j];
R[j]=R[0]; //利用数组的R[0]来做交换临时区;
exchange = true;//发生了交换,故将交换标识置为真;
}
}
if(!exchange)
return;
}
}
复制代码
作者:
彭嘉聪
时间:
2012-1-16 13:56
if(!exchange)判断本趟排序没有发生交换,提前退出算法
作者:
Joyuang
时间:
2012-1-16 16:06
我再贡献个我博客整理的常见排序算法http://blog.163.com/qianzhaoyuan@126/blog/static/102748225201201633241345/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2