黑马程序员技术交流社区
标题:
冒泡排序练习
[打印本页]
作者:
hoop.zeng
时间:
2015-4-28 17:18
标题:
冒泡排序练习
刚看完毕老师java初级视频中的数组冒泡排序。提到了可以通过栈中建变量来记录要交换元素的序号,来减少堆中数组元素间的交换操作,以提高代码执行效率。自己尝试了一下,运行ok,以下是我的实现代码:
class J3_1
{
/*
需求:在冒泡排序中去除数组元素间多余的交换操作
思路: 以升序为例
1,n维数组的冒泡排序要有n-1次冒泡
2,每次冒泡中实际上只需要一次数组元素的交换
3,定义变量记录每次冒泡中最大数的元素序号,比较完后做两个数的交换
*/
public static void main(String[] args)
{
int [] arr = {5,3,19,2,1,45,64,33};
System.out.println("原数组:");
arrPrint(arr);
arrSort(arr);
System.out.println("排序后数组:");
arrPrint(arr);
}
//排序函数
public static void arrSort(int [] a)
{
for(int i=0;i<a.length-1;i++)
{
//定义变量max记录每次冒泡最大值的序号,初值为0
int max = 0;
for(int j=1;j<a.length-i;j++)
{
//依次将元素与最大值比较,若该元素比当前最大值大,将它的序号赋给max
if(a[max]<a[j])
max = j;
}
//定义变量k记录每次冒泡中的最后一个比较数的序号,若max!=k,则将这两个下标对应的元素交换
int k = a.length-i-1;
if(k != max)
{
int temp = a[k];
a[k] = a[max];
a[max] = temp;
}
}
}
//定义一个功能,将数组遍历输出
public static void arrPrint(int[] a)
{
for(int i = 0;i<a.length;i++)
{
if(i!=a.length-1)
System.out.print("a["+i+"]="+a[i]+',');
else
System.out.println("a["+i+"]="+a[i]);
}
}
}
复制代码
作者:
bboyXiaoNuo
时间:
2015-4-28 21:15
大神啊都学些算法了
作者:
罗韬
时间:
2015-4-28 21:39
阔以的6666666
作者:
牛仔很忙fire
时间:
2015-4-28 21:41
不错,求大腿
作者:
罗尖栋
时间:
2015-4-28 21:55
课本里就有个冒泡程序,课后练习也有个冒泡程序,已经干掉了!
作者:
19期1910
时间:
2015-4-28 21:57
牛人,佩服。
作者:
呆呆呆呆孔
时间:
2015-4-28 21:59
为来收藏了
作者:
374856298
时间:
2015-4-28 22:10
不明觉厉,专业支持
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2