上个学期学校开了数据结构的课,就这样酱油过来了,感觉弱弱的,随着年龄的增长,思维也有了一点点的转变,这个学期又重新捡起了,算法(Algorithm)和数据结构(data structure)是搞伊特(IT)的屌丝程序猿大学四年甚至是一生都要学习的东西,他的重要性就不多说了,搞这个的都懂,虽然做不了什么ACM的大神,也做不了什么算法的大牛,但是觉得这个东西对思维和眼界的开阔 确实很有帮助的,人的脑袋是越想越有idea的,虽然过程有一点痛苦,但是当把一个别人搞不懂的东西(也许只知道用,却不知道原理的人来说)搞出来的时候自己心里还是会有一点点的小幸福的,这种感觉大家都懂。
这个学期开始决定把一些常用的算法给搞懂,虽然有些东西自己也想不出,还是要借助百度,既然别人乐于奉献,那我们就欣然接受咯,只是花一点点自己的时间去把他们扣下来,成为自己的东西,何乐而不为。下面贴上算法篇的第一个程序,写过很多次了,今天贴出来,放在算法(Algorithm)篇的第一个位置,这绝不是最后一个,相信一年后,那里面会堆得满满的,只为对自己的监督和一个弱弱的承诺。
说了那么多的废话,下面开始第一个冒泡排序
原理:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度 O(n2)
一个循环嵌套另一个循环,外层的循环控制依次要操作的每一个元素,
内层的循环控制外层当前被操作 数依次和其他数的比较。
代码:
/** * 冒泡排序的方法 */ public void bubbleSort() { for(int i=1;i <count;i++ ) { for(int j=0; j < count-i;j++) { if(array[j]>array[j+1]) { exChange(j,j+1); } } } }
下面贴出 整个程序的代码:
package 冒泡排序; /** * 冒泡排序 * @author TMs * */ public class BubbleSort { public long[] array; public int count; public static void main(String[] args) { BubbleSort bubbleSort = new BubbleSort(10); bubbleSort.insert(35); bubbleSort.insert(5); bubbleSort.insert(3); bubbleSort.insert(135); bubbleSort.insert(34); bubbleSort.insert(78); bubbleSort.insert(3); bubbleSort.insert(335); bubbleSort.insert(25); bubbleSort.insert(65); bubbleSort.getSize(); System.out.println("排序前:"); bubbleSort.display(); bubbleSort.bubbleSort(); System.out.println("排序后:"); bubbleSort.display(); } /* * 构造方法,生成一个指定大小的数组 */ public BubbleSort(int max) { array = new long[max]; count = 0; } /** * 向一个数组中插入一个元素 */ public void insert(long value) { array[count] = value; count++; } /** * 得到数字的中元素的个数 * @return 数组中元素的个数 */ public void getSize() { System.out.println("数组中当前有的元素个数="+count); } /** * 打印数组的值 */ public void display() { for(int i = 0; i<count; i++) { System.out.print("array["+i+"]="+array[i]+" "); } System.out.println(); } /** * 冒泡排序的方法 */ public void bubbleSort() { for(int i=1;i <count;i++ ) { for(int j=0; j < count-i;j++) { if(array[j]>array[j+1]) { exChange(j,j+1); } } } } /** * 交换数组的下标 * @param x 下标 * @param y 下标 */ public void exChange(int x,int y) { long temp; temp = array[x]; array[x] = array[y]; array[y] = temp; } }
运行结果:
数组中当前有的元素个数=10 排序前: array[0]=35 array[1]=5 array[2]=3 array[3]=135 array[4]=34 array[5]=78 array[6]=3 array[7]=335 array[8]=25 array[9]=65 排序后: array[0]=3 array[1]=3 array[2]=5 array[3]=25 array[4]=34 array[5]=35 array[6]=65 array[7]=78 array[8]=135 array[9]=335
PS:
冒泡排序也是我们学过的最简单的排序方法了,也是我们大学接触到的第一个 排序方法,先易后难,做事要有一个过程嘛。晚上吃多了会长胖。
相关推荐
最快的排序算法 C语言最简单的排序算法冒泡排序并返回排序前索引序号,排序算法数据结构
用C++语言实现的几个常见算法,里面有注解,方便大家理解,简单易学,都可以正常编译运行。
1冒泡排序 2改进的冒泡排序,在一次冒泡的过程中,如果没有发生交换,则已经有序 3进一步改进的冒泡排序,如果在某次冒泡过程中,最后一次进行交换的位置为flag,则表示flag之后的序列已经有序,那么下一次冒泡就...
关于c#的一些算法 选择排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 基数排序 计数排序。。。
C# 常用经典算法,选择排序 冒泡排序 快速排序 插入排序 希尔排序
选择排序算法、冒泡排序算法和插入排序算法的时间复杂度为O(n2),写法简单,逻辑易懂,但算力性价比不高,不适用于数据量较大时使用。 合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为...
采用c++描述了各种排序算法,包括选择排序 冒泡排序 插入排序 基数排序 快速排序 归并排序 。实验内容 1、创建排序类。 2、提供操作:选择排序、冒泡排序、插入排序、*基数排序、*快速排序、*归并排序。 3、*能够...
C#四种排序算法 冒泡排序 插入排序 选择排序 希尔排序 希尔排序是将组分段,进行插入排序.
7大排序算法(快速排序,冒泡排序,选择排序,归并排序,插入排序,希尔排序,堆排序)实现源码
经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序
呵呵,传上来供大家学习使用~8种排序算法 包括:选择排序 冒泡排序 快速排序 等~~
C++排序算法之冒泡排序源码
直接插入排序 冒泡排序 快速排序 直接选择排序 堆排序 二路归并排序 C#源代码 使用C#实现的数据结构中的排序算法
在STM8S003单片机上实现数组排序,用3种冒泡排序法对数组进行排序,并通过串口打印排序过程。
一个简单的算法效率对比,实验证明,快速排序的效率比冒泡的效率高出很多啊!
java算法,快速排序、冒泡排序、选择排序 快速排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51822361 冒泡排序文章:http://blog.csdn.net/yanwenyuan0304/article/details/51819045
1.冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 2.通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是...
//冒泡排序 for(int i=0;i;i++){ for(int j=i+1;j;j++){//注意j的开始值是i+1,因为按照排序规则,比a[i]大的值都应该在它后面 if(a[i] > a[j]){ int temp = a[j]; a[j] = a[i]; a[i] = temp; ...
冒泡排序 简单选择排序 c语言基础 排序算法 数组操作 排序算法实验 简单的c语言程序 排序算法输出
数据结构冒泡排序算法 数据结构冒泡排序算法