刚看完毕老师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]);
- }
- }
- }
复制代码
|
|