三大基本排序--选择、冒泡、插入

引言:

老师已经是第三次跟我们讲排序了,可想而知排序它的重要性,这三种基本排序的方式值得我们思考和研究,理解其中的思想。

简述:

概念:

将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序

常见排序算法:

快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。

选择排序:

原理:

将初始序列(A[0]~A[n-1])作为待排序序列,按照从小到大进行排序,假设现在A[0]是最小的,将剩余的元素与其进行比较,如果比A[0]大,则互换位置,如果比A[0]小则不动,这样第一轮就轮完了,找到了最小的元素;第二轮,假设A[1]是次小的,将剩余的元素与其比较,找到次小的元素放到A[1]位置,依次进行下去,经过n-1轮排序,顺序就排好了。

示图:

代码实现:

 class 选择排序
    {
        //定义一个数组
        static List<int> list = new List<int>() { 48, 15, 26, 82, 65 };
        static void Main(string[] args)
        {
            //调用排序方法
            Choice();
            PrintList ();
        }
        //选择排序
        static void Choice()
        {
            //定义变量temp 和minIndex都为0
            int temp = 0;
            int minIndex = 0; //数组中最小数的下标
            for (int i = 0; i < list .Count ; i++)
            {
                minIndex = i;  //标记此下标为最小值
                for (int j = i+1; j < list .Count ; j++)
                {
                    //依次和数组中其他数据进行比较,如果其他数据比当前标记的数值小,则把较小数值的下标赋给minIndex
                    if (list[j]<list[minIndex])
                    {
                        minIndex = j;
                    }
                 }
                //交换数据
                temp = list[minIndex];
                list[minIndex] = list[i];
                list[i] = temp;
            }
        }
        private static void PrintList()

        {
            foreach (var item in list)
            {
                Console.WriteLine(string.Format("{0}", item));
            }
            Console.WriteLine();
            Console.ReadLine();
        }
    }

效果:

冒泡排序:

原理:

将初始序列(A[0]~A[n-1])作为待排序序列,按照从小到大进行排序,相邻的两个元素进行比较,则较大的数放到后面,这样一轮结束后最大的元素就放到了最后位置,依次进行,n-1轮之后,顺序就排好了。

示图:

代码实现:

  class 冒泡排序
    {
        //定义一个数组
        static List<int> list = new List<int>() { 48, 15, 7, 34, 25 };
        static void Main(string[] args)
        {
            //调用排序方法
            Bubble();
            PrintList();
        }
        //冒泡排序
        static void Bubble()
        {
            //定义临时变量
            int temp = 0;
            for (int i = list.Count; i > 0; i--)
            {
                for (int j = 0; j < i-1; j++)
                {
                    //相邻的两个数进行比较,把较大的数放到后面
                    if (list[j] >list[j+1])
                    {
                        //交换数据
                        temp = list[j];
                        list[j] = list[j+1];
                        list[j+1] = temp;
                    }
                }
            }
        }
        private static void PrintList()
        {
            foreach (var item in list)
            {
                Console.WriteLine(string.Format("{0}", item));
            }
            Console.WriteLine();
            Console.ReadLine();
        }
    }

效果:

插入排序:

原理:

给定序列,存在一个分界线,分界线的左边被认为是有序的,分界线的右边还没被排序,每次取没被排序的最左边一个和已排序的做比较,并插入到正确位置。(从小到大)

示图:

代码实现:

class 插入排序
    {
        //定义一个数组
        static List<int> list = new List<int>() { 48, 15, 7, 34, 25 };
        static void Main(string[] args)
        {
            //调用排序方法
            Insert();
            PrintList();
        }
        //插入排序
        static void Insert()
        {
            for (int i=1;i <list.Count;i++)
            {
                //定义临时变量
                int temp = list[i];
                int j = i;
                //如果在已经排好序的数列段中没有找到比新值小的数
                while (j>0 && temp <list [j-1])
                {
                    //将比新数值大的数向后移
                    list[j] = list[j - 1];
                    j--;
                }
                //如果在已经排好序的数列中找到比新数小的数值,将数值替换到此位置
                list[j] = temp;
            }
        }
        private static void PrintList()
        {
            foreach (var item in list)
            {
                Console.WriteLine(string.Format("{0}", item));
            }
            Console.WriteLine();
            Console.ReadLine();
        }
    }

效果:

比较:

一张图胜过千言万语。

    

总结:

1.思想上移,行动下移。

2.实践了才知道是否正确

时间: 2024-10-09 07:42:22

三大基本排序--选择、冒泡、插入的相关文章

排序算法-冒泡——插入——快排

冒泡排序,往两个方向泡,一个往小泡,一个网大泡 #include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } v

基于比较的排序---选择、插入、冒泡

初学排序时,也比较模糊,多是照猫画虎,不能透彻理解.今天对几种简单的排序的做一小结.日后继续学习.总结更多地.性能更优的排序! 一.选择排序 先把代码贴上 1 #include<stdio.h> 2 int main() 3 { 4 int a[9] = {5,7,4,6,1,9,3,2,8}; 5 int len = sizeof(a)/sizeof(int); 6 int i,j,min,temp,m; 7 for(i = 0; i < len; i++) 8 { 9 min = i

基础排序算法—冒泡,插入,选择

前言 冒泡,插入,选择这三种基础的排序算法,比较简单效率不高,工作中一般不会使用,但是当做算法来研究还是能了解一些知识的,本文以<数据结构与算法之美>为基础,详细解析一下. 正文 首先要引入几个概念 稳定性 如果待排序数组中有相同的元素,排序过后它们的相对顺序不发生变化. 比如 2,9,3,4,8,3 排序过后为2, 3 , 3, 4, 8, 9 这两个3的相对顺序不变.这样就是具有稳定性. 稳定性可以保证复杂数据结构排序时的相对有序性. 比如我们要对一笔订单先按金额排列,金额相同的再按时间排

排序算法-(冒泡、选择、插入算法)

运行效率较慢的三大排序算法:冒泡.选择与插入算法,时间复杂度都为O(n2),运行效率较慢. #python 代码实现如下所示: li=[2,1,4,5,7,8,9,5,3]#冒泡算法(升序算法)O(n2)import randomfrom cal_time import *@cal_timedef bubble_sort(li): for i in range(len(li)-1): #第i趟 exchange=False for j in range(len(li)-i-1): #无序区域为n

python排序算法实现(冒泡、选择、插入)

python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)): for j in range((i+1),len(s)): s[i],s[j]=min(s[i],s[j]),max(s[i],s[j]) #print count print s 2.选择排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(l

常见排序算法(冒泡、选择、插入、快速、归并C++实现)

常见排序算法(冒泡.选择.插入.快速.归并C++实现) #include <iostream> using namespace std; // 冒泡排序 void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j < size - 1 - i; ++j) if (data[j+1] <

排序算法-冒泡、插入、归并、希尔、快速、选择--代码总结

冒泡排序代码: #include <iostream> #include <string> using namespace std; template<class ItemType> void bubbleSort(ItemType theArray[], int n) { bool sorted = false; // False when swaps occur int pass = 1; while (!sorted && (pass < n

三个基本排序算法的效率比较(冒泡,选择和插入)

1.冒泡算法. 冒泡算法是最基础的一个排序算法,每次使用第一个值和身后相邻的值进行比较,如果是升序将大数向左边交换,降序则向右边交换.最终将大数移动到一边,最终排成一个序列: public class Sorting { public void BubbleSorting() { int[] arr = new int[10]; Random rd = new Random(100); for (int i = 0; i < arr.Length; i++) { arr[i] = rd.Next

js排序算法总结——冒泡,快速,选择,插入,希尔,归并

相信排序是任何一个程序猿都会用到的东西,今天简单总结记录下常见的排序算法. 一.冒泡排序 说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放在前面: 如 var arr = [7, 3, 10, 1, 8, 4, 2, 4, 4, 3] 进行升序排列,排序过程如下 第一次 [3, 7, 1, 8, 4, 2, 4, 4, 3, 10] 第二次 [3, 1, 7, 4, 2, 4, 4, 3, 8, 10] 以此类推 .... 结果 [1