冒泡排序;选择排序;插入排序;快排;判断大小端;位运算

本文主要是介绍冒泡排序;选择排序;插入排序;快排;判断大小端;位运算,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.冒泡排序:基础        时间复杂度来说:o(n^2)

从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。

#include <stdio.h>int main(void)
{int str[32] = 0;int i = 0;int j = 0;int len = sizeof(str) / sizeof(str[0]);int tmp = 0;for(i=0; i<len; i++){scanf("%d", &str[i]);        }printf("排序前:");for(i=0; i<len; i++){printf("%d", str[i]);}printf("\n");for(j=0; j<len-1; j++){for(i=0;i<len-i-1; i++){if(str[i] > str[i+1]){tmp = str[i];str[i] = str[i+1];str[i+1] = tmp;}}}printf("排序后:");for(i=0; i<len; i++){printf("%d", str[i]);}printf("\n");return 0;
}

2.选择排序:交换次数少;交换的数据所占空间较大时适用         时间复杂度来说:o(n^2)

假设有10个元素a[1]-a[10],将a[1]与a[2]-a[10]比较,若a[1]比a[2]-a[10]都小,则不进行交换。若a[2]-a[10]中有一个以上比a[1]小,则将其中最小的一个与a[1]交换,此时a[1]就存放了10个数中最小的一个。同理,第二轮拿a[2]与a[3]-a[10]比较,a[2]存放a[2]-a[10]中最小的数,以此类推。

#include<stdio.h>int main()
{int i = 0;int j = 0;int t = 0;int a[10] = {0};printf("请输入10个整数:\n");for(i=0; i<10; i++){scanf("%d",&a[i]);    //输入10个整数存到数组里}    for(i=0; i<9; i++){for(j=i+1; j<10; j++){if(a[i] > a[j])     //如果前一个数比后一个大,则调换值{t = a[i];a[i] = a[j];a[j] = t;}}for(i=0; i<10; i++){printf("%d  ",a[i]);}printf("\n");return 0;
}

3.插入排序:已近有序的数据使用插入排序,时间复杂度为o(n)

int InsertSort(int *pArray, int MaxLen)
{int i = 0;int j = 0;int tmp = 0;for(j=1; j<MaxLen; j++){tmp = pArray[j];for(i=j; i>0 && tmp < pArray[i-1]; i--){pArray[i] = pArray[i-1];       } pArray[i] = tmp;}return 0;
}

4.快排

选一个key值(选第一个值),从后面选一个比其小的值,从前面选一个比其大的值,key值放中间

int QuickSort(int *pArray, int Low, int High)
{int key = 0;int i = Low;int j = High;key = pArray[Low];while(i < j){while(i < j && pArray[j] >= key){j--;}pArray[i] = pArray[j];while(i < j && pArray[i] <= key){i++;}pArray[j] = pArray[i];}pArray[i] = key;if(i-1 > Low){QuickSort(pArray, Low, i-1);}if(i+1 < High){QuickSort(pArray, i+1, High);}return 0;
}

5.判断大小端

测试一个硬件平台是大端平台?小端平台?
    1.小端:内存低地址存放低数据位称为内存小端
    2.大端:内存低地址存放高数据位称为内存大端

#include <stdio.h>int main(void)
{int num = 0x11223344;if (0x44 == *(char *)&num){printf("小端!\n");}else if (0x11 == *(char *)&num){printf("大端!\n");}return 0;
}

使用联合体结构

#include <stdio.h>union s
{char a;int b;
};int main(void)
{union s s1;s1.b = 1;if (s1.a){printf("小端!\n");}else {printf("大端!\n");}return 0;
}

6.位运算

位运算:
     &      按位与
     |      按位或
     ^      按位异或        相同为0  相异为1 
     ~      按位取反
     <<     左移            
     >>     右移            让数据缩小   num /= 2 ^ n

     &       0得0 
     |        1置1 

    不改变其余位的前提下,让第n位置1
    int num: 1110 1011 
   
    num = num | (1 << n);

    不改变其余位的前提下,让第n位置0
    int num:1110 1011

    num = num & (~(1 << n));

    ^        实现两个数的交换

进行数据置换:

#include <stdio.h>int main(void)
{int a = 100;int b = 200;a = a ^ b;b = a ^ b;a = a ^ b;printf("a = %d, b = %d\n", a, b);return 0;
}

这篇关于冒泡排序;选择排序;插入排序;快排;判断大小端;位运算的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134597

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

JAVA数组中五种常见排序方法整理汇总

《JAVA数组中五种常见排序方法整理汇总》本文给大家分享五种常用的Java数组排序方法整理,每种方法结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录前言:法一:Arrays.sort()法二:冒泡排序法三:选择排序法四:反转排序法五:直接插入排序前言:几种常用的Java数组排序

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用