首页 > 其他分享 >第十九关——排序(重新来过)

第十九关——排序(重新来过)

时间:2022-10-24 15:25:44浏览次数:42  
标签:minIndex arr 来过 元素 len 第十九 序列 排序

那就从排序开始重新的c++程序之旅吧!2022-10-24 14:08:51

排序一般分为三类:

  • 选择排序、插入排序、冒泡排序

  • 堆排序、归并排序、快速排序(快排)、希尔排序

  • 基数排序、计数排序、桶排序

对n个元素进行排序时,第一类排序的时间复杂度为O(n2),第二类排序的时间复杂度是O(nlogn).(第三类排序不常用,其时间复杂度与n,m(数值大小范围)有关)


选择排序

算法步骤

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

动图演示

代码实现

 

void xuanze(){
    for(int i=1;i<=n;i++){
        int s,t;
        s=a[i];
        for(int j=i+1;j<=n;j++){
            if(a[j]<s){
                t=s;
                s=a[j];
                a[j]=t;
            } 
        }
        a[i]=s;
    }
}  //c++

 

 

 

def selectionSort(arr):
    for i in range(len(arr) - 1):
        # 记录最小数的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小数时,将 i 和最小数进行交换
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr
#Python

冒泡排序

 

算法步骤

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

动图演示

 

代码实现 

void maopao(){
    int t;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n-i;j++){
            if(a[j]>a[j+1]){
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
    return 0;
} //c++
def bubbleSort(arr):
    for i in range(1, len(arr)):
        for j in range(0, len(arr)-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr
#Python

插入排序 

 

算法步骤

将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

动图演示

代码实现

 

标签:minIndex,arr,来过,元素,len,第十九,序列,排序
From: https://www.cnblogs.com/wybxz/p/16821517.html

相关文章

  • c语言面试题(C语言面试题库,快速排序非递归)
    什么是C语言C語言是1972年左右由DennisRitchie一??人在?????室(?稱AT&T)設?開發出?淼碾?腦程式語言.他??r與KenThompson?扇斯餐??UNIX作?I系統的發展,而UNIX作?I系統(是......
  • c语言生成随机数(c语言生成随机数并排序)
    vc环境下c语言怎么生成随机数能给个0-100之间的程序最好了…r=((double)rand()/((double)(RAND_MAX)(double)(1)));请问如何用C语言写随机数产生器?给个代码谢谢!一个......
  • CF 1677D(Tokitsukaze and Permutations-冒泡排序)
    已知长度为n的排列,经过k次冒泡(每次把最大的数交换到最后)后,得到的新序列为.现在已知的某些地方的值,不知道的记,求合法原排列数。考虑和排列达成双射关系。且1次冒泡会导致......
  • Python如何根据两个字段进行排序?
    Python如何根据两个字段进行排序?写这个博客,就是为了吐槽Python!对于这个问题,首先,我花了一天时间,没有解决!当然是百度了,一搜,有很多博客,无一例外,都是垃圾!有的,只排数组!实体......
  • 2022.10.20-B 排序
    题意一个长为\(n\)的排列,第\(i\)个位置上的数是\(p_i\);花费\(a_i\)的代价将数字\(i\)移到任意位置;花费\(b_i\)的代价将数字\(i\)移到左端;花费\(c_i\)的......
  • 数组中的排序算法以及普通查找
    数组中的排序算法以及普通查找普通查找基本查找publicclassDemo01{publicstaticvoidmain(String[]args){int[]m={10,45,78,4,6,85,14,......
  • (四)MySQL基础知识之union和排序
    继续连着昨天数据库的基本操作,今天看下MySQL的union功能和排序 union:UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集合中。如果多个SELECT语句会......
  • 7.Python自定义排序详解
    如果以创建的对象作为列表中的元素,那么对列表进行排序时可使用sort()函数或sorted()函数,但要注意的是:①当排序对象为列表的时候两者适合的场景不同②sorted()函数会返......
  • Demo45_冒泡排序
    packagecom.HuanXin.CeShi;importjava.util.Arrays;publicclassD{publicstaticvoidmain(String[]args){int[]AA={1,3,5,8};//11-1=10......
  • DQL-排序查询和聚合函数
    DQL-排序查询语法:orderby子句orderby排序字段1排序方式1,排序字段2排序方式2...排序方式:ASC:升序,默认的DESC:降序注意:如果有多个排序条件,则当前的条件......