冒泡排序
来源:互联网 发布:网络教育大学排名 编辑:程序博客网 时间:2024/05/22 06:37
欢迎Java爱好者品读其他算法详解:
简单比较排序:http://blog.csdn.net/ysjian_pingcx/article/details/8652091
选择排序: http://blog.csdn.net/ysjian_pingcx/article/details/8656048
直接插入排序:http://blog.csdn.net/ysjian_pingcx/article/details/8674454
快速排序: http://blog.csdn.net/ysjian_pingcx/article/details/8687444
快速排序优化:http://blog.csdn.net/ysjian_pingcx/article/details/8687444
/** * 原始的冒泡排序法,时间复杂度为O(n2) * * @param array */public void bubbleSort(int... array) {int length = array.length;for (int i = 0; i < length - 1; i++) {for (int j = 0; j < length - i - 1; j++) {// 内部循环的边界要比长度小一if (array[j] > array[j + 1]) {swap(j, j + 1, array);//相邻的两个元素比较,将大的放到最右边}}}}
for (int i = 0; i < length - 1; i++)
for (int j = 0; j < length - i - 1; j++)
/** * 内部实现,用于交换数组的两个引用值 * * @param beforeIndex * @param afterIndex * @param arr */private void swap(int oneIndex, int anotherIndex, int[] array) {int temp = array[oneIndex];array[oneIndex] = array[anotherIndex];array[anotherIndex] = temp;}
/** * 冒泡排序法 * * @author PingCX * */public class BubbleSort {public static void main(String[] args) {BubbleSort bubbleSort = new BubbleSort();int[] array = { 25, 36, 21, 45, 98, 13};System.out.println(Arrays.toString(array));bubbleSort.bubbleSort(array);// 调用快速排序的方法System.out.println(Arrays.toString(array));// 打印排序后的数组元素}/** * 原始的冒泡排序法,时间复杂度为O(n2) * * @param array */public void bubbleSort(int... array) {int length = array.length;for (int i = 0; i < length - 1; i++) {for (int j = 0; j < length - i - 1; j++) {// 内部循环的边界要比长度小一if (array[j] > array[j + 1]) {swap(j, j + 1, array);//相邻的两个元素比较,将大的放到最右边}}}}/** * 内部实现,用于交换数组的两个引用值 * * @param beforeIndex * @param afterIndex * @param arr */private void swap(int oneIndex, int anotherIndex, int[] array) {int temp = array[oneIndex];array[oneIndex] = array[anotherIndex];array[anotherIndex] = temp;}}
/** * 优化的冒泡排序法,时间复杂度为O(n2) * * @param array */public void bubbleSort(int... array) {int length = array.length;boolean flag = true; //一个标记for (int i = 0; i < length - 1 && flag; i++) {//加这个条件就是当有序的时候就不用重复后面的操作了flag = false;for (int j = 0; j < length - i - 1; j++) {if (array[j] > array[j + 1]) {swap(j, j + 1, array);// 相邻的两个元素比较,将大的放到最右边flag = true;}}}}@上边的代码多了一个 boolean flag = true;
for (int i = 0; i < length - 1 && flag; i++)@开始flag为true,能进入循环,已进入循环就将flag = false;:
for (int i = 0; i < length-1 && flag; i++) {//加这个条件就是当有序的时候就不用重复后面的操作了flag = false;//进入循环体,就置为false
if (array[j] > array[j + 1]) {swap(j, j + 1, array);// 相邻的两个元素比较,将大的放到最右边flag = true;//存在反序的就将flag置为true}
/** * 优化的冒泡排序法 * * @author PingCX * */public class BubbleSortOpt {public static void main(String[] args) {BubbleSortOpt bubbleSort = new BubbleSortOpt();int[] array = { 25, 36, 21, 45, 98, 13};System.out.println(Arrays.toString(array));bubbleSort.bubbleSort(array);// 调用快速排序的方法System.out.println(Arrays.toString(array));// 打印排序后的数组元素}/** * 优化的冒泡排序法,时间复杂度为O(n2) * * @param array */public void bubbleSort(int... array) {int length = array.length;boolean flag = true; //一个标记for (int i = 0; i < length-1 && flag; i++) {//加这个条件就是当有序的时候就不用重复后面的操作了flag = false;//进入循环体,就置为falsefor (int j = 0; j < length - i - 1; j++) {if (array[j] > array[j + 1]) {swap(j, j + 1, array);// 相邻的两个元素比较,将大的放到最右边flag = true;//存在反序的就将flag置为true}}}}/** * 内部实现,用于交换数组的两个引用值 * * @param beforeIndex * @param afterIndex * @param arr */private void swap(int oneIndex, int anotherIndex, int[] array) {int temp = array[oneIndex];array[oneIndex] = array[anotherIndex];array[anotherIndex] = temp;}}
上面是对int[] 进行的排序,那么面向对象的这这应用不能只局限于int[] 数组中,也就是任何可以比较的类型都可以用冒泡来排序,下面是优化后的代码的实现:
/** * 冒泡排序法 * * @author PingCX * */public class BubbleSortTOpt {public static void main(String[] args) {BubbleSortTOpt bubbleSort = new BubbleSortTOpt();Integer[] array = { 25, 36, 21, 45, 98, 13};System.out.println("Before sorting:");System.out.println(Arrays.toString(array));bubbleSort.bubbleSort(array);// 调用冒泡排序的方法System.out.println("After sorting:");System.out.println(Arrays.toString(array));// 打印排序后的数组元素}/** * 冒泡排序法,时间复杂度为O(n2) * * @param array */public <T extends Comparable<T>> void bubbleSort(T[] array) {int length = array.length;boolean flag = true;for (int i = 0; i < length - 1 && flag; i++) {flag = false;for (int j = 0; j < length - i - 1; j++) {if (array[j].compareTo(array[j + 1]) > 0) {swap(j, j + 1, array);// 相邻的两个元素比较,将大的放到最右边flag = true;}}}}/** * 内部实现,用于交换数组的两个引用值 * * @param beforeIndex * @param afterIndex * @param arr */private <T extends Comparable<T>> void swap(int oneIndex, int anotherIndex,T[] array) {T temp = array[oneIndex];array[oneIndex] = array[anotherIndex];array[anotherIndex] = temp;}}
欢迎Java爱好者品读其他算法详解:
简单比较排序:http://blog.csdn.net/ysjian_pingcx/article/details/8652091
选择排序: http://blog.csdn.net/ysjian_pingcx/article/details/8656048
直接插入排序:http://blog.csdn.net/ysjian_pingcx/article/details/8674454
快速排序: http://blog.csdn.net/ysjian_pingcx/article/details/8687444
快速排序优化:http://blog.csdn.net/ysjian_pingcx/article/details/8687444
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- 冒泡排序
- (iPhone/iPad开发)关于clang: error: invalid deployment target for -stdlib=libc++
- C++ 全局变量和局部变量
- ie9 与 firefox、chrome浏览器 css、js兼容问题
- uva 11134 Fabled Rooks
- 硬盘MBR详细介绍
- 冒泡排序
- [转载]SAP R3 性能调优—内存篇
- sql查询语句查询条件字段的拼装
- Android界面View及ViewGroup
- 吾日三省吾身
- Server Error in '/' Application.
- {"当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'OrderList' 中的标识列插入显式值"}-异常处理方案
- centos装linux.iso
- 用户和用户组加入磁盘配额限制