选择排序与冒泡排序

 /// <summary>
        /// 选择排序
        /// </summary>
        /// <param name="arr"></param>
        static void Sort1(int[] arr)
        {
            int len = arr.Length;
            for (var i = 0; i < arr.Length; i++)
            {
                int min = i;
                for (var n = i + 1; n < arr.Length; n++)
                {
                    if (arr[n] < arr[min])
                    {
                        min = n;
                    }
                }
                var temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        /// <summary>
        /// 冒泡排序
        /// </summary>
        /// <param name="arr"></param>
        static void Sort2(int[] arr)
        {
            int len = arr.Length;
            for (var i = 0; i < arr.Length; i++)
            {
                for (var n = i + 1; n < arr.Length; n++)
                {
                    if (arr[n] < arr[i])
                    {
                        var temp = arr[i];
                        arr[i] = arr[n];
                        arr[i] = temp;
                    }
                }

            }
        }
        static void Main(string[] args)
        {
            var arr = new int[]{1,2,5,6,7,3,4,56,7,7};
            Sort1(arr);
            foreach (var i in arr)
            {
                Console.WriteLine(i);
            }
            var arr2 = new int[] { 1, 2, 5, 6, 7, 3, 4, 56, 7, 7 };
            Sort1(arr2);
            foreach (var i in arr2)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }

以下为这两种排序算法的对比:

选择排序与冒泡排序比较的次数是一样的

选择排序的交换次数要比冒泡排序的交换次数少

以下为这两种算法的关键点:

为了找出最小的元素而扫描一遍数组,并不能为下一遍扫描提供任何信息,

  这样就造成这种现象:一个有序的数组和一个无需的数组排序时间是一样的

交换次数和数组的大小是线性的

  数组越大,以为着交换次数也越大

时间: 2024-10-15 10:41:46

选择排序与冒泡排序的相关文章

Java选择排序和冒泡排序示例

package cc.test; /** * Demo描述: * 选择排序和冒泡排序 */ public class TestSort { public static void main(String[] args) { TestSort testSort=new TestSort(); int intArray []=new int []{11,3,-2,4,8,7}; testSort.selectSort(intArray); testSort.bubbleSort(intArray);

C语言实现选择排序、冒泡排序和快速排序的代码示例_C 语言

选择和冒泡 #include<stdio.h> void maopao(int a[],int len){ int i,j,temp; for(i = 0;i < len - 1 ; i ++){//从第一个到倒数第二个 for (j = 0 ; j < len - 1 - i ; j ++)//排在后的是已经排序的 { if (a[j] > a[j + 1])//大的数换到后面去 { temp = a[j]; a[j] = a[j + 1]; a [j + 1] = tem

Python选择排序、冒泡排序、合并排序代码实例_python

前两天刚装了python 3.1.1, 禁不住技痒写点code.1.选择排序 复制代码 代码如下: >>> def SelSort(L):     length=len(L)     for i in range(length-1):         minIdx=i         minVal=L[i]         j=i+1         while j<length:             if minVal>L[j]:                 min

JavaScript 冒泡排序和选择排序的实现代码_javascript技巧

废话不多说了,直接给大家贴代码了,具体代码如下所述: var array = [1,2,3,4,5]; // ---> 服务 //效率 ---> 针对一个有序的数组 效率最高 //标志 true false for(var j = 0; j < array.length - 1;j++ ){ //- j 每次排序完成之后 后面减少比较的次数 var isTrue = true; //如果数组本身就是升序,则直接输出 for(var i = 0; i < array.length -

JAVA数组之选择排序算法

注意选择排序和冒泡排序的异同点: 它们两者比较的次数一样,O[N^2]的时间. 但选择排序的交换次数要比冒泡少.我想是因为它在每次循环之前,就设计了一个锚点.(如下面的MIN),这样就避免了已排序好的元素再交换.其适用于排序量少而交换多. public void insert(long value) { int j; int i; long temp; long min; a[nElems] = value; nElems++; for(j = 0; j < nElems; j++){ min

选择排序算法

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕. 本文地址:http://www.cnblogs.com/archimedes/p/select-sort-algorithm.html,转载请注明源地址. 选择排序的主要优点与数据移动有关.如果某个元素位于正确的最终位置上,则它不会被移动.

我的Java开发学习之旅------&amp;gt;Java经典排序算法之选择排序

一.算法原理 对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置, 接着第二次比较,前面"后一个元素"现变成了"前一个元素",继续跟他的"后一个元素"进行比较如果后面的元素比 他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了, 然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整 个数组中最小的数了.然后找

单链表-C语言选择排序法和冒泡法区别问题

问题描述 C语言选择排序法和冒泡法区别问题 编程实现将给定的一组整数采用选择排序法按由小到大的顺序排序.要求: 1) 编写函数create()根据已知整数数组构造一个单链表,假设结点只有一个整数数据域. 2) 编写函数sort()采用选择排序方法对已知链表进行排序. 3) 在主函数中完成数据的输入与结果的输出. ===我自己写了一个程序,但是不确定选择排序法是什么,求大侠帮忙看下我写的代码sort()是选择排序吗?感觉自己混淆了选择排序法和冒泡排序了,求教如何区别? #include #incl

算法 选择排序-C语言关于选择排序法的问题

问题描述 C语言关于选择排序法的问题 #include"stdio.h" #define?N?10 int?main()? { int?i,j,min,tem,a[N];? for(i=0;i ????scanf("%d",&a[i]); for(i=0;i { ????min=i;? ????for(j=i+1;j ?????????if(a[min]>a[j])? ?????????min=j;? ????tem=a[i];? ????a[i]=a