【算法】 冒泡排序

        /// <summary>
        /// 冒泡排序
        /// 思路: 遍历源集合元素,比较相邻的2元素,使大的元素往后移
        /// 第一次遍历选出最大的元素,将其移到最后位
        /// 第二次遍历选出第二大的元素,将其移到最后第二位
        /// 以此类推
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list">源集合</param>
        /// <param name="func">泛型判断函数</param>
        /// <returns></returns>
        public static List<T> Sort<T>(List<T> list, Func<T, T, bool> func)
        {
            if (list == null || list.Count <= 1)
            {
                return list;
            }
            for (int i = 0; i < list.Count; i++)
            {
                for (int j = 0 ; j < list.Count - i - 1; j++) // 遍历的次数为总元素个数减1再减去外层循环的已循环次数
                {
                    if (func(list[j], list[j + 1])) // 比较相邻2元素,使大的后移
                    {
                        T temp = list[j];
                        list[j] = list[j + 1];
                        list[j + 1] = temp;
                    }
                }
            }
            return list;
        }
时间: 2024-10-29 04:34:57

【算法】 冒泡排序的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

排序算法—冒泡排序

*/--> 排序算法-冒泡排序 Table of Contents 1 问题描述 2 冒泡排序(Bubble) 2.1 冒泡排序(一) 2.2 冒泡排序(二) 2.3 冒泡排序(三) 2.4 冒泡排序(四) 3 阅读参考 1 问题描述 引子 排序是数据结构中十分重要的一章,排序算法有很多种,一直没时间整理而且很多排序算法理解的也不是很透彻.希望通过这次整理吃透吧! 排序算法十分多,故分篇进行整理. 说明 本文重点是理解排序算法,而不是完整的程序,所以每节都只有具体排序算法的接口.没有完整的源代码

啊哈算法-冒泡排序

下面介绍的是啊哈算法的冒泡排序算法: #include <stdio.h> int main() { int a[100], i, j, t, n; scanf("%d", &n); for (i = 1; i <= n; i++) scanf("%d", &a[i]); for (i=1; i<= n-1; i++) { for (j=1; j<=n-i; j++) { if (a[j] < a[j+1]) {

算法--冒泡排序

冒泡排序是一种极其简单的排序算法. WHY? 因为他的思路是这样的:每两个数比较,大的就往后. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int a; 5 while(cin>>a){ 6 int b[a+1]; 7 int i=1;

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

算法-冒泡排序和快速排序(Object-C)

冒泡和递归一样,不管大家水平怎么样,基本上都能凑合的写写,快速排序其实主要的也是数据的交换,都算是交换排序,不过快排需要了解分治思想,实现的时候需要递归一下,导致很多时候看快排的时候都看的云里雾里.假设有一个无序的整型数组 索引  0     1     2    3     4      5     6 数值  15   32    8    99   12  17  36, ①取出0位的15作为基准值,然后倒序从后往前找小于15的,将12赋值给0位: ②从前往后找大于15的将32放置到位置4

三个典型的经典算法冒泡排序,插入排序,选择排序

稍微轻松点,彻底理解了一下这三个算法,当然只是部分,还有什么改良版,具体分类等等,不过下周有事,先把这几个典型的弄明白,老规矩,看代码说问题 /** * Created by fanyafeng on 2015/5/8/0008. */ public class ALGTest { public static void main(String[] args) { System.out.println("排序算法"); System.out.println("---------

白话排序算法--冒泡排序

前言: 这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以体育课排队列的方式进行演示 系列的其他篇章的情景同上 冒泡排序:  重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该 数列已经排序完成. 情景描述: 体育课上,老师需要一个纵列(从低到高竖着站一排),集合的时候大家随便凑了一列,但是高低不齐,一共6个人这时老师说,我给你们个办法,按照我的办法,你们自己排列队形. 从第

经典排序算法——冒泡排序

对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: 输入数组:[1,2,3,5,2,3],6 输出数组:[1,2,2,3,3,5] class BubbleSort { public: int* bubbleSort(int* A, int n) { // write code here bool flag=true; for(int i=0;i<n && flag;++i) { for(int j=n-

排序算法-冒泡排序(改),选择排序

上次说冒泡排序留下2个问题,一个是选择排序,一个是冒泡排序性能,这次会先说选择排序,然后说冒泡排序的优化 一选择排序 选择排序是一种简单直观的排序算法.它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 流程: (有小到大排序) 第一轮 将0位元素与后续所有元素比较,将小的元素放在0位 第二轮 将1位元素与后续所有元素比较,将小的元素放在1位 ... 直到最后一位 代码上次已经贴出,这里复制下 1 public static vo