面试常考各类排序算法总结.(c#)

一. 面试以及考试过程中必会出现一道排序算法面试题,为了加深对排序算法的理解,在此我对各种排序算法做个总结归纳。

1.冒泡排序算法(BubbleSort)

 1 public Class SortDemo
 2 {
 3      public void BubbleSort(int arr)
 4      {
 5             int temp=0;
 6           //需要走arr.Length-1 趟
 7            for(int i=0;i<arr.Length-1;i++)
 8            {
 9                  //每一趟需要比较次数
10                  for(int j=0,j<arr.Length-i-1;j++)
11                  {
12                      //升序排序
13                       if(arr[j]>arr[j+1])
14                       {
15                                temp=arr[j];//将较大的变量保存在临时变量
16                                arr[j]=arr[j+1];
17                                arr[j+1]=temp;
18                        }
19                  }
20             }
21
22      }
23 }

2.直接插入排序(InsertionSort)

public Class SortDemo
{
      public void InsertionSort(int[] arr)
      {
             int temp=0;
             //遍历待插入的数(从第二位开始)
             for(int i=1;i<arr.Length;i++)
             {
                     int j=i-1;//(j为已排序的待插入的位置序号)
                     //若已排序的数大于待插入数,则往后移一位
                     while(j>=0&&arr[j]>arr[i])
                     {
                            arr[j+1]=arr[j];
                            j--;
                      }
                     arr[j+1]=arr[i];//将待插入的数放入插入位置
              }
      }
}

3.选择排序(SelectionSort)

public void SelectionSort(int[] arr)
     {         int temp;
         for(int i=0;i<arr.Length-1;i++)         {             int minVal=arr[i];             int minIndex=i;             for(int j=i+1;j<arr.Length;j++)             {                 if(minVal>arr[j])                 {                     minVal=arr[j];                    minIndex=j;                 }             }             temp=arr[i];             arr[i]=minVal;             arr[minIndex]=temp;         }

     }
}
时间: 2024-12-20 20:43:01

面试常考各类排序算法总结.(c#)的相关文章

[面试常考]排序算法总结

排序在各次面试的过程中问道的次数不少,冒泡排序和快速排序尤多.因此做一些总结,尤其是代码部分. 1. 冒泡排序 (1)思想 在一组数中,对当前未排好序的数,自上而下地对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的数往上冒. (2)复杂度 平均情况-O(n^2) 最坏情况-O(n^2)(逆序有序) 最好情况-O(n)(正序有序) 空间复杂度-O(1) (3)稳定性 稳定 (4)伪码 bubblesort(A) { for i=1 to length[A] // 排序的趟数 { for

面试常考数据结构与算法

数据结构部分: 1.数组和链表的区别.(很简单,但是很常考,记得要回答全面) C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小.而在实际应用中,用户使用数组之前无法确定数组的大小,只能够将数组定义成足够大小,这样数组的空间可能不被使用,从而造成内存空间的浪费.链表是一种常见的数据组织形式,他采用动态分配内存的形式实现.需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费. 从逻辑结构上来看

面试必考三大排序算法C++代码(快速排序、归并排序、堆排序)

前两个为C++风格代码,后一个为C风格代码,除了输入输出,其它无差别,但C输入输出要比C++更快. 快速排序 1 #include <iostream> 2 using namespace std; 3 4 void swap(int num[], int i, int j) 5 { 6 int temp = num[i]; 7 num[i] = num[j]; 8 num[j] = temp; 9 } 10 11 int partition(int num[], int left, int

数据结构-各类排序算法总结[结局]

各类排序算法总结 五.分配类排序->基数排序: 基数排序是一种借助于多关键码排序的思想,是将单关键码按基数分成"多关键码"进行排序的方法.基数排序属于"低位优先"排序法,通过反复进行分配与收集操作完成排序. 对于数字型或字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字, 此时可以采用这种"分配-收集"的办法进行排序,称作基数排序法.其好处是不需要进行关键字间的比较. 例如:对下列这组关键字{278, 109, 063, 930

PHP面试常考内容之Memcache和Redis(1)

你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点为以下几点,更新时间为每周一三五,可以关注本栏持续关注,感谢你的支持. 一.什么是Memcache?二.Memcache有什么特征?三.Memcache的内存管理机制是什么样的?四.Memcache和Memcached有什么区别?五.如何操作Memcache?六.如何使用Memcache做Session共享?

数据结构-各类排序算法总结[续]

各类排序算法总结 三.交换类排序[接上] 2.快速排序 快速排序是通过比较关键码.交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分.其中,一部分所有记录的关键码大于等于支点记录的关键码,另一部分所有记录的关键码小于支点记录的关键码.我们将待排序列按关键码以支点记录分成两部分的过程,称为一次划分.对各部分不断划分,直到整个序列按关键码有序. 如果每次划分对一个元素定位后,该元素的左侧子序列与右侧子序列的长度相同,则下一步将是对两个长度减半的子序列进行排序,这是最理想的情况! [算法

(转)各类排序算法总结

各类排序算法总结 一. 排序的基本概念 排序(Sorting)是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个项值有序的序列. 有 n 个记录的序列{R1,R2,…,Rn},其相应关键字的序列是{K1,K2,…,Kn},相应的下标序列为1,2,…,n.通过排序,要求找出当前下标序列1,2,…, n 的一种排列p1,p2, …,pn,使得相应关键字满足如下的非递减(或非递增)关系,即:Kp1≤Kp2≤…≤Kpn,这样就得到一个按关键字有序的记录序列{R

数据结构—各类‘排序算法’实现(上)

数据结构中的排序算法分为比较排序,非比较排序.比较排序有插入排序.选择排序.交换排序.归并排序,非比较排序有计数排序.基数排序.下面是排序的具体分类: 1.直接排序 主要思想:使用两个指针,让一个指针从开始,另一个指针指向前一个指针的+1位置,两个数据进行比较 void InsertSort(int* a, size_t size) {      assert(a);      for (size_t i = 0; i < size - 1; i++)      {           int 

Java面试常考到的东东

1.super与this的区别? super是我们在子类中想使用被子类隐藏的父类的成员变量或方法时,可以使用的关键字. this出现在类的实例方法中,代表使用该方法的当前对象.也可以出现在类的构造方法中,代表使用该构造方法所创建的对象. this()代表当前类对象,super()代表父类对象. 表示在子类访问父类的成员和行为,必须受到类继承规则的约束. 在子类的构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个构造函数被私有化了,此时必须加入