`

重走算法路之简单排序(冒泡)

阅读更多

           上个学期学校开了数据结构的课,就这样酱油过来了,感觉弱弱的,随着年龄的增长,思维也有了一点点的转变,这个学期又重新捡起了,算法(Algorithm)数据结构(data structure)是搞伊特(IT)的屌丝程序猿大学四年甚至是一生都要学习的东西,他的重要性就不多说了,搞这个的都懂,虽然做不了什么ACM的大神,也做不了什么算法的大牛,但是觉得这个东西对思维和眼界的开阔 确实很有帮助的,人的脑袋是越想越有idea的,虽然过程有一点痛苦,但是当把一个别人搞不懂的东西(也许只知道用,却不知道原理的人来说)搞出来的时候自己心里还是会有一点点的小幸福的,这种感觉大家都懂。

          这个学期开始决定把一些常用的算法给搞懂,虽然有些东西自己也想不出,还是要借助百度,既然别人乐于奉献,那我们就欣然接受咯,只是花一点点自己的时间去把他们扣下来,成为自己的东西,何乐而不为。下面贴上算法篇的第一个程序,写过很多次了,今天贴出来,放在算法(Algorithm)篇的第一个位置,这绝不是最后一个,相信一年后,那里面会堆得满满的,只为对自己的监督和一个弱弱的承诺。

      说了那么多的废话,下面开始第一个冒泡排序

      

 

      原理:

冒泡排序算法的运作如下:(从后往前)
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

     时间复杂度 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:

   冒泡排序也是我们学过的最简单的排序方法了,也是我们大学接触到的第一个     排序方法,先易后难,做事要有一个过程嘛。晚上吃多了会长胖。

   

 

 

      

  • 大小: 67.1 KB
0
0
分享到:
评论

相关推荐

    详细的常用算法及其代码,ACM比赛算法

    4. **排序算法**:如选择排序、插入排序、冒泡排序、Shell排序、Shaker排序、堆排序、快速排序和合并排序。这些都是常见的排序算法,各有优缺点,适用于不同的数据场景。 5. **搜寻算法**:包括循序搜寻、二分搜寻...

    算法导论源码

    在sort.cpp中,可能包含了各种排序算法的实现,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。这些排序算法各有优缺点,适用于不同的场景,理解它们的工作原理和性能特点对于优化程序至关重要。 ...

    C语言 经典算法 算法大全

    15. 各种排序算法:包括选择排序、插入排序、冒泡排序、希尔排序、谢尔排序、快速排序、归并排序、基数排序等,它们各有优缺点,适用于不同场景和数据特性。 16. 搜索算法:如顺序搜索、二分搜索、插补搜索、...

    常用算法程序集(C语言描述)

    - 冒泡排序:通过不断交换相邻的逆序元素来逐步排序,时间复杂度为O(n^2)。 - 选择排序:每次找出未排序部分的最大(或最小)元素并放置到正确位置,时间复杂度为O(n^2)。 - 插入排序:将每个元素插入到已排序...

    Java常见100多种算法大全

    - **冒泡排序**:通过相邻元素比较并交换位置,逐步将最大或最小的元素“冒”到数组的一端。 - **选择排序**:每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。 - **插入排序**:将未排序元素...

    C程序设计-c常用算法程序集

    - **冒泡排序**:这是一种简单的排序算法,通过重复遍历数组,比较相邻元素并交换位置来逐步将较大的元素“冒”到数组的一端。 - **选择排序**:每次从未排序的部分中选取最小(或最大)的元素,放到已排序部分的...

    C常用算法程序集.rar

    - **冒泡排序**:是最简单的交换排序,通过不断比较相邻元素并交换来实现排序,适用于小规模或部分有序的数据。 - **选择排序**:每次选择当前未排序部分的最小(或最大)元素放到已排序部分的末尾,适合数据量小...

    C语言实现一些经典算法,可以免费下载

    Shaker排序则在一次遍历中实现了类似冒泡排序的双向过程。选择排序的改良则是引入了其他排序思想,例如树排序等。 33. 快速排序法、合并排序法、基数排序法 这些是高级排序算法。快速排序通过选取一个基准元素,将...

    算法:我学习算法

    - 冒泡排序:通过重复遍历列表,比较相邻元素并交换位置,直至列表有序。 - 快速排序:使用分治策略,选取一个基准元素,将数组分为两部分,然后递归地对这两部分进行排序。 - 归并排序:同样采用分治策略,将...

    CC++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验

    - **排序与搜索**:快速排序、归并排序、冒泡排序、二分查找等。 - **动态规划**:理解动态规划的基本思想,解决最优化问题。 - **图论算法**:Dijkstra算法、Floyd算法、Prim算法、Kruskal算法等。 - **字符串...

    c语言复赛题.pdf

    可以使用数组来存储随机数,然后使用冒泡算法来排序。在排序的过程中,可以统计不重复数据的个数,并将其输出。 开心的金明 开心的金明问题的描述是:金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他...

    acm-icpc模板

    排序算法是计算机科学中最基本的算法之一,常用的排序算法包括冒泡排序、选择排序、插入排序、快速排序等。 ##### BFS (广度优先搜索) BFS 是一种图遍历算法,它按照节点的层次顺序访问每个节点。通常用于寻找最短...

    ACM培训资料(练就坚实的基础)

    - **排序算法**:包括冒泡排序、插入排序、选择排序、快速排序等。 - **查找算法**:如二分查找、深度优先搜索(DFS)、广度优先搜索(BFS)等。 - **贪心算法**:适用于局部最优解可以导致全局最优解的情况。 ####...

    西电2013年acm校队选拔笔试样题

    * 解析:有许多排序算法,如冒泡排序、选择排序、插入排序、归并排序、快速排序等。这里,我们可以选择快速排序算法。快速排序算法的核心代码如下: ```c void quicksort(int arr[], int low, int high) { if (low...

    精心整理史上最全的数据结构flash演示动画,共5个版本,祝大家考研成功!

    \数据结构flash演示\版本1\1-4 算法和算法分析 冒泡排序.swf \数据结构flash演示\版本1\10-1-1插入排序.swf \数据结构flash演示\版本1\10-2-2直接插入排序.swf \数据结构flash演示\版本1\10-2-3折半插入排序.swf ...

    2011百度笔试题

    - **冒泡排序**:稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **选择排序**:不稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **插入排序**:稳定,时间复杂度O(n^2),空间复杂度O(1)。 - **快速排序**:不稳定,...

Global site tag (gtag.js) - Google Analytics