遇到的面试题目之排序算法

举个例子,一位数组,从小到大进行排序。

常见的排序,是冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序、基数排序、桶排序等。

1.冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法

它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

来源: https://baike.baidu.com/item/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F

冒泡排序算法的原理如下:

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

时间复杂度:

static void Main(string[] args)
        {
            //从小到大
            int[] num = new int[10] { 21, 13, 34, 25, 36, 17, 84, 2, 11, 43 };
            for (int i = 0; i < num.Length; i++)
            {
                for (int j = i + 1; j < num.Length; j++)
                {
                    if (num[i] > num[j])
                    {
                        int temp = num[i];
                        num[i] = num[j];
                        num[j] = temp;
                    }
                }
            }
            foreach (var item in num)
            {
                Console.WriteLine(item);
            }
        }

  

2.选择排序

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

来源:https://baike.baidu.com/item/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

选择排序的原理:

n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:

①初始状态:无序区为R[1..n],有序区为空。

②第1趟排序

在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

static void selection_sort<T>(T[] arr) where T : System.IComparable
        {
            int i, j, min, len = arr.Length;
            T temp;
            for (i = 0; i < len - 1; i++)
            {
                min = i;
                for (j = 0; j < len; j++)
                {
                    if (arr[min].CompareTo(arr[j]) > 0)
                    {
                        min = j;
                    }
                    temp = arr[min];
                    arr[min] = arr[i];
                    arr[i] = temp;
                }

            }
        }

  

参考:十大经典排序算法(动图演示)https://www.cnblogs.com/onepixel/articles/7674659.html

原文地址:https://www.cnblogs.com/nanguoyezi/p/9369101.html

时间: 2024-10-19 18:33:57

遇到的面试题目之排序算法的相关文章

面试题目集锦 -- 排序算法

      面试过程中.免不了会问一些比較基础的问题,而这些基础的问题肯定要说到排序上去.       我们知道.排序算法包括插入,选择,冒泡.高速,归并,堆排序等等,大多时候,我们在面试的时候,最常问的排序算法是堆,高速和归并排序,其它的几种相对简单,问的较少.那么,我们仅仅须要在面试前把它们都弄懂然后自己在纸上写出来就能够了.在写这些算法的时候,我查了非常多的资料,也看了非常多文章.毕竟排序算法非常经典.所以,在这上面花的时间还挺多的.只是,我发现有些排序算法的实现偏复杂.并且不好理解,于是

面试中的排序算法总结(转)

转自http://www.codeceo.com/article/10-sort-algorithm-interview.html 前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.

面试中的排序算法总结

来源:http://www.cnblogs.com/wxisme/p/5243631.html 前言 查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.桶排序等.面试官对于这些排序可能会要

面试——8大排序算法图文讲解

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序.选择排序.冒泡排序.归并排序.快速排序.堆排序.基数排序等. 本文将依次介绍上述八大排序算法. 算法一:插入排序 插入排序示意图 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入. 算法步骤: 1)将第一待排序序列第一

排序算法(C语言+Python版)宝宝再也不怕面试官写排序算法了

直接插入排序 过程: 1. 数据可分看成两个部分,前面的数据是有序的 2. 从后面的数据取出一个元素,插到前面有序数据的合适位置 从右端开始查找,到找到比此元素大的时候,则此元素向后移动,以空出多余的空间来插入此元素. 3. 查找至最后. 例: 3 2 4 5 8 1 2 3 4 5 8 1 1 2 3 4 5 8 def insert_sort(lists): count = len(lists) for i in range(1, count): tmp = lists[i] j = i -

【面试准备】排序算法之堆、

#include<stdio.h> void Fix(int a[], int index); int main(){ int array[10] = { 1, 3, 6, 4, 19, 33, 10, 3, 8, 2 }; Fix(array, 9); for (int i = 9; i >= 0; i--){ int temp = array[i]; array[i] = array[0]; array[0] = temp; Fix(array, i-1); } for (int i

面试常考排序算法

//直接插入排序 void InsertSort(int A[], int n) { int i,j; int temp; for (i=0;i<n-1;i++) { temp=A[i+1]; j=i; while (j>-1&&temp<A[j]) { A[j+1]=A[j]; j--; } A[j+1]=temp; } } //冒泡排序 void BubbleSort(int A[],int n) { int i, j, flag=1; int temp; for (

十大排序算法总结(Python3实现)

十大排序算法总结(Python3实现) 本文链接:https://blog.csdn.net/aiya_aiya_/article/details/79846380 目录 一.概述 二.算法简介及代码展示 1.冒泡排序 2.简单选择排序 3.简单插入排序 4.堆排序 5.快速排序 6.希尔排序 7.归并排序 8.计数排序 9.桶排序 10.基数排序 11.#代码说明 三.感悟总结 ________________________________________ 一.概述 排序算法大概是hello

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综