首页 > 编程语言 >学习十大排序算法(1)——选择排序【实现方法c语言】

学习十大排序算法(1)——选择排序【实现方法c语言】

时间:2023-04-20 21:34:25浏览次数:55  
标签:十大 int 用法 算法 sizeof 排序 赋值

十大排序算法第一节——选择排序

  复制代码直接滑到最后!!!

  选择排序就是找到(最大或者)最小元素,放到最开始的位置,然后就是在没有排序的序列中找到最小的排在已经排好的序列之后,直至没有排数列排完。(自己的理解)

  大概解释代码其中的细节:第6行中的sizeof的用法是求出括号里面的所占的字节数,比如sizeof(a),a数组是int型,所占四个字节,但a是数组,其中包括九个元素,所以sizeof(a)的值为4*9 = 36,同理sizeof(a[0]) =  4;在此处,我刚开始学习的时候,使用的不是sizeof,而是strlen,上网百度之后才知道,strlen适用于定义char的东东,其他内容可以自己去看下面的知识,关于sizeof的用法链接放下面,回归正题,说远了。

 (4条消息) C语言中的sizeof的用法详解_sizeof在c语言中的用法_shanweikezhang的博客-CSDN博客

  然后就是算法的思想,简单来说,就是找到数组a中的最小元素,然后放到最前面,依次做下去,代码来说就是先将a[i] 赋值给最小值min,然后和a[i]后面的元素a[j]进行比较,如果后面a[j]比前面的a[i]小,那么,就将a[j]的值赋值给临时变量temp,然后将a[i]的值赋值给a[j],然后将temp的值赋值给a[i],完成位置的转换,也就是将最小的放在了最起前面,最后将a[j]的值赋值给min,(前面判断出a[j]<min)后面就是打印出排好序的序列,剩下的不难理解,不做解释,如果实在理解不了,可以私信或者@我,我们再讨论。

  运行结果如图:

 

  废话不多说,直接上完整代码:

 

 1 //选择排序 
 2 #include <stdio.h>
 3 
 4 int main(){
 5     int a[] = {2,5,8,3,1,9,4,6,7};
 6     int b = sizeof(a)/sizeof(a[0]);//sizeof(a) = 36,sizeof(a[0]) = 4;求出的是所占的字节; 
 7     printf("%d\n",b);
 8     printf("排序前:");
 9     for(int i = 0;i<b;i++){
10         printf("%d",a[i]);
11     }
12     printf("\n");
13     int min;
14     printf("排序后:");
15     for(int i = 0;i<b;i++){
16         for(int j = i;j<b;j++){
17             min = a[i];
18             if(a[j]<min){
19                 int temp = a[j];
20                 a[j] = a[i];
21                 a[i] = temp;
22             }
23             min = a[j];
24         }    
25         printf("%d",a[i]);    
26     }
27     return 0;
28 }

  第一次写博客有点紧张,如果有错误的地方,莫怪!!!跪谢!!!希望大牛可以指导!!!

标签:十大,int,用法,算法,sizeof,排序,赋值
From: https://www.cnblogs.com/H418/p/17338423.html

相关文章

  • 指针配合数组和函数案例(冒泡排序)
    #include<iostream>usingnamespacestd;voidmaopao(int*arr,intlen){ for(inti=0;i<len-1;i++) { for(intj=0;j<len-i-1;j++) { if(arr[j]>arr[j+1]) { inttemp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }}voidprintf(int*arr,in......
  • 冒泡排序
    问题:对N个整数,由键盘输入,进行升序排序。设计:首先定义一个数组,可以盛放n个元素,利用for循环输入数组中每个元素的值,定义for循环j=1,j<=n-1,j++经过举例,需要n-1个轮回,j的for循环中嵌套i的for循环,i=0;i<n-j,i++经过举例,每次比较的次数为n-j次,因为j次轮回时,最后的j个元素就已经是按顺序......
  • 起泡法排序 用起泡法对10个数由小到大排序
    起泡排序是一种基础的排序算法,它通过比较相邻的两个数的大小来排序,如果前一个数比后一个数大,则交换这两个数的位置,这样一遍比较之后,最大的数就会被排在最后面,然后再重复进行这个过程,直到所有的数都被排好序为止。下面是使用起泡排序对10个数进行排序的步骤:初始化待排序数组:[5,......
  • 福特-富克森算法
    福特-富克森(Ford-Fulkerson)算法是一种求解最大流问题的经典算法,它的基本思想是通过不断地增广路径来找到最大流。最大流问题通常是指在网络中找到从源点到汇点的最大流量,其中网络由若干条有向边组成,每条边都有一个容量,表示该边可以通过的最大流量。最大流问题的目标是找到一个流,......
  • Dijkstra的算法
    Dijkstra算法是一种单源最短路径算法,用于在带有非负权重的图中,找到一个源节点到所有其他节点的最短路径。该算法的基本思想是通过贪心的方式逐步扩展当前已知的最短路径集合,直到找到源节点到所有其他节点的最短路径。Dijkstra算法的具体步骤如下:初始化:设置源节点到自己的距离......
  • 兔子产子问题(递归算法)
    #include<iostream>usingnamespacestd;intf(intn){ if(n==1||n==2) return1; returnf(n-1)+f(n-2);}intmain(){ inti; for(i=0;i<30;i++) { if((i+1)%5==0) cout<<endl; cout<<f(i+1); cout<<&q......
  • hive row_number分组排序top
    自从hive0.11.0开始,加入了类似orcle的分析函数,很强大,可以查询到分组排序top值使用方法跟oracle没有差别 贴个小例子查询的是同一个操作下pv前十的用户select*,row_number()OVER(PARTITIONBYt3.actionORDERBYpvdesc)ASflagfrom(selectaction,uuid,count(1)as......
  • fiddler按时间排序
    在Fiddler中,可以通过设置“Rules”来给每个请求添加时间戳。具体操作如下:打开Fiddler,选择“Rules”菜单,点击“CustomizeRules”。在打开的脚本编辑器中,找到以下代码:staticfunctionOnBeforeResponse(oSession:Session){//...} 在这段代码中,添加以下代码:......
  • Oracle 开窗函数 三个排序函数的区别
    1.ROW_NUMBER2.RANK3.DENSKRANK这三个函数都是依托窗口函数进行的分组后的排序,对于排序的特点有些细节的区别ROW_NUMBER()就是简单地按照Partitionby要分组的字段排序,若orderby后的字段值相同会区分出大小(原则不详),整体来说是的由1到N的排序selectt.*,row_number()over......
  • 《算法竞赛进阶指南》 第五章 237. 程序自动分析
    地址https://www.acwing.com/problem/content/239/在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分......