0
点赞
收藏
分享

微信扫一扫

关于排序,自定义范围(动态)数组的简单总结与思考

Just_Esme 2022-03-20 阅读 45
c++

本周,通过对STL 的初步学习,我又掌握了一些知识,再通过昨天对相关资料的阅读,我觉得有必要对一些知识进行一下总结汇总,以方便自己整理思路及日后运用。

目录

排序

1.冒泡排序与选择排序

2.快速排序

3.sort函数排序

动态数组

1.常变量动态数组

2.new 定义动态数组

3.vector动态数组

排序


1.冒泡排序与选择排序

这两种排序是在上学期学习的最基础的排序,虽然模板上教给我们的是一个升序一个是降序,但其实只要正确理解两种排序的实质,只要自己确定大于小于的使用,就可以自主确定升降序了。

其中冒泡排序的思路更简单,将数列中前后两个数依次比较并交换,通过不断减小比较次数的大小,最后得到有序的数列。

for(int i=0;i<n-1;i++)//n为数列的大小
{
   for(int j=0;j<n-i-1;j++)
{ 
   if(a[j]>a[j+1])
{
   int temp =a[j];
   a[j]=a[j+1];
   a[j+1]=temp; 
}}}

选择排序则比较直接,直接选出最小/大的那一位,将其与第i位进行交换,最后得到有序数列

for (int i = 0; i < n - 2; i++)
    {
        for (int j = i + 1; j < n; j++)
        {
            if (a[i] < a[j])
            {
                int temp = a[j];
                a[j] = a[i];
                a[i] = a[j];
            }
        }
    }

这两种排序最为简单实用,但在比赛时较为繁冗,易导致超时。

2.快速排序

这是在寒假时自学的一种排序方式,但由于没有系统的学习,导致掌握程度不深,只是简单的明白了原理,为防止之后复习误导,就不做赘述,之后专门写一篇关于快速排序的博客做记录吧。

3.sort函数排序

这是上周新学的一种排序,是运用函数进行排序的方法。虽然不知道函数体的具体代码,但至少会用,就简单说一下。

据我了解,sort()函数是类似于快速排序的方法,时间复杂度为n*log2(n),执行效率较高,但在使用时要记得加头文件#include<algorithm> 一般而言,sort进行的是升序排列,即

如果想进行降序排列,则需增加新的参数,cmp函数。cmp函数其实就是一个确认前后量大小的布尔类型函数。但在sort函数里,则可以更改排序规则。不过,使用时要打出cmp函数的函数体。

sort 函数在使用时十分方便,而且速度快,代码清晰,在今后的使用中可以重点注意

动态数组

1.常变量动态数组

这是我当初自己摸索出的一种自定义长度的“动态”数组。实质上就是运用常变量,自由输入数组长度,以方便运用。虽然不能说有多动态,但使用起来很方便。不过,他也具有一定的局限性,在VS等对语法要求严格的编译器上无法使用,只能在codeblock 上使用,不过,我当初在比赛时用过一次,似乎是可以用的。

const int a;
cin >> a;
int b[a];

2.new 定义动态数组

这是最近学习面向对象后新学习的一种动态数组,核心在于对new 的使用,不过,这种数组需要直接用指针指向,不能命名,使用起来比较麻烦,不过它可以自行增长数组的长度,比如,之前有5个长度,当填满这5个需要再度填入时,就可以自动再加5个,对一些情况很方便。

语法:指针名  =  new  数据类型  [数组长度]

int n , *p;
cin >> n;
p = new int [n];
p[0]=1;

3.vector动态数组

这是本周最新学的一个动态数组,很简练。有点像类的使用。

定义:vector  <数据类型> 数组名;

注意:加头文件#include <vector>

误区:不能用 for(int i=0;i<n;i++){  a[ i ] = i ;  }类似的方法赋值,只能用push_back()赋值

虽然对于这个动态数组我还没使用过,但我能明白这个知识的重要性,在今后的习题中勤加练习。

结语:

关于排序,我一直好奇优先队列是否能算其中一个,它也是根据使用者的意愿进行大小排列,不过它似乎不能直接作为排序手段,就没有加入。今天总结的知识点都很重要,这不仅仅是简单的总结,更是对自己思路的一种整理,今后更多的知识,也需要保持这样的态度。

举报

相关推荐

0 条评论