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

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

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

相关文章

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

uva 575 Skew Binary(位运算)

求第一个以(2^(k+1)-1)为进制的数。 数据不大,可以直接搞。 代码: #include <stdio.h>#include <string.h>const int maxn = 100 + 5;int main(){char num[maxn];while (scanf("%s", num) == 1){if (num[0] == '0')break;int len =

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

hdu 1285(拓扑排序)

题意: 给各个队间的胜负关系,让排名次,名词相同按从小到大排。 解析: 拓扑排序是应用于有向无回路图(Direct Acyclic Graph,简称DAG)上的一种排序方式,对一个有向无回路图进行拓扑排序后,所有的顶点形成一个序列,对所有边(u,v),满足u 在v 的前面。该序列说明了顶点表示的事件或状态发生的整体顺序。比较经典的是在工程活动上,某些工程完成后,另一些工程才能继续,此时

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte