上个学期学校开了数据结构的课,就这样酱油过来了,感觉弱弱的,随着年龄的增长,思维也有了一点点的转变,这个学期又重新捡起了,算法(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:
冒泡排序也是我们学过的最简单的排序方法了,也是我们大学接触到的第一个 排序方法,先易后难,做事要有一个过程嘛。晚上吃多了会长胖。
相关推荐
4. **排序算法**:如选择排序、插入排序、冒泡排序、Shell排序、Shaker排序、堆排序、快速排序和合并排序。这些都是常见的排序算法,各有优缺点,适用于不同的数据场景。 5. **搜寻算法**:包括循序搜寻、二分搜寻...
在sort.cpp中,可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。这些排序算法各有优缺点,适用于不同的场景,理解它们的工作原理和性能特点对于优化程序至关重要。 ...
15. 各种排序算法:包括选择排序、插入排序、冒泡排序、希尔排序、谢尔排序、快速排序、归并排序、基数排序等,它们各有优缺点,适用于不同场景和数据特性。 16. 搜索算法:如顺序搜索、二分搜索、插补搜索、...
- 冒泡排序:通过不断交换相邻的逆序元素来逐步排序,时间复杂度为O(n^2)。 - 选择排序:每次找出未排序部分的最大(或最小)元素并放置到正确位置,时间复杂度为O(n^2)。 - 插入排序:将每个元素插入到已排序...
- **冒泡排序**:通过相邻元素比较并交换位置,逐步将最大或最小的元素“冒”到数组的一端。 - **选择排序**:每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。 - **插入排序**:将未排序元素...
- **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来逐步将较大的元素“冒”到数组的一端。 - **选择排序**:每次从未排序的部分中选取最小(或最大)的元素,放到已排序部分的...
- **冒泡排序**:是最简单的交换排序,通过不断比较相邻元素并交换来实现排序,适用于小规模或部分有序的数据。 - **选择排序**:每次选择当前未排序部分的最小(或最大)元素放到已排序部分的末尾,适合数据量小...
Shaker排序则在一次遍历中实现了类似冒泡排序的双向过程。选择排序的改良则是引入了其他排序思想,例如树排序等。 33. 快速排序法、合并排序法、基数排序法 这些是高级排序算法。快速排序通过选取一个基准元素,将...
- 冒泡排序:通过重复遍历列表,比较相邻元素并交换位置,直至列表有序。 - 快速排序:使用分治策略,选取一个基准元素,将数组分为两部分,然后递归地对这两部分进行排序。 - 归并排序:同样采用分治策略,将...
- **排序与搜索**:快速排序、归并排序、冒泡排序、二分查找等。 - **动态规划**:理解动态规划的基本思想,解决最优化问题。 - **图论算法**:Dijkstra算法、Floyd算法、Prim算法、Kruskal算法等。 - **字符串...
可以使用数组来存储随机数,然后使用冒泡算法来排序。在排序的过程中,可以统计不重复数据的个数,并将其输出。 开心的金明 开心的金明问题的描述是:金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他...
排序算法是计算机科学中最基本的算法之一,常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。 ##### BFS (广度优先搜索) BFS 是一种图遍历算法,它按照节点的层次顺序访问每个节点。通常用于寻找最短...
- **排序算法**:包括冒泡排序、插入排序、选择排序、快速排序等。 - **查找算法**:如二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)等。 - **贪心算法**:适用于局部最优解可以导致全局最优解的情况。 ####...
* 解析:有许多排序算法,如冒泡排序、选择排序、插入排序、归并排序、快速排序等。这里,我们可以选择快速排序算法。快速排序算法的核心代码如下: ```c void quicksort(int arr[], int low, int high) { if (low...
\数据结构flash演示\版本1\1-4 算法和算法分析 冒泡排序.swf \数据结构flash演示\版本1\10-1-1插入排序.swf \数据结构flash演示\版本1\10-2-2直接插入排序.swf \数据结构flash演示\版本1\10-2-3折半插入排序.swf ...
- **冒泡排序**:稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **选择排序**:不稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **插入排序**:稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **快速排序**:不稳定,...