冒泡排序
/** * 冒泡排序算法 * @author WangZhen */package test;import java.util.HashSet;import java.util.Iterator;import java.util.Random;import java.util.Set;public class BubbleSort {public static void main(String[] args) {int c = 0;Random random = new Random();Set<Integer> set = new HashSet<Integer>();while (set.size() < 10) {set.add(random.nextInt(10));}System.out.println("生成1到10个不重复的数:");Iterator<Integer> it = set.iterator();while (it.hasNext()) {c++;if(c%20 ==0){System.out.print(it.next() + ",\n ");}else{System.out.print(it.next() + ", ");}}Integer[] values = (Integer[]) set.toArray(new Integer);System.out.println("\n升序冒泡排序算法:");sortAsc(values);c=0;for (Integer i : values) {c++;if(c %20==0){System.out.print(i + ",\n");}else{System.out.print(i + ", ");}}System.out.println("\n降序冒泡排序算法:");c=0;sortDesc(values);for (Integer i : values) {c++;if(c %20==0){System.out.print(i + ",\n");}else{System.out.print(i + ", ");}}}public static void sortAsc(Integer[] values) {for (int i = 0; i < values.length; ++i) {for (int j = 0; j < values.length - i - 1; ++j) {if (values > values) {int temp = values;values = values;values = temp;}}}}public static void sortDesc(Integer[] values) {for (int i = 0; i < values.length; i++) {for (int j = 0; j < values.length - i - 1; j++) {if (values <= values) {int temp = values;values = values;values = temp;}}}}} 结果:生成1到10个不重复的数:2, 4, 8, 9, 6, 1, 3, 7, 5, 0, 升序冒泡排序算法:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 降序冒泡排序算法:9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 对于效率问题:有一种方法 但是和上面的相差很微小
/** * 冒泡排序实现原理:把数组分为无序区和有序区,起始全部为无序区* 对于无序区依次比较大小,将较大(或较小)的提前* 每趟最后一次交换的位置就是有序区起点 * 由于无序区也有可能已经有序,所以每趟遍历完毕将有序区起始点清零* 如果没有交换的元素说明已经排序完毕 每趟遍历只需达到有序区之前就可 */public static void sortAsc(Integer[] values) {int flag = values.length - 1; // 有序区起始点while (flag > 0) {int index = flag; // 临时保存有序区起点flag = 0; // 将有序区起点清零for (int i = 0; i < index; ++i) {if (values > values) {int temp = values; // 交换数据values = values;values = temp;flag = i; // 如果发生元素交换就更新起始点}}}}
页:
[1]