精华内容
下载资源
问答
  • C语言升序排列

    千次阅读 2020-12-17 22:56:47
    //升序排列 #include<stdio.h> void sort(int array[],int n); //排序函数声明 void swap(int *ex1,int *ex2); //交换函数声明 int main() { int a[10],i; printf(“请输入要排列的数字:\n”); for(i=0;i<...

    @TOCC语言中的排列

    1,代码

    //升序排列
    #include<stdio.h>
    void sort(int array[],int n); //排序函数声明
    void swap(int *ex1,int *ex2); //交换函数声明
    int main()
    {
    int a[10],i;
    printf(“请输入要排列的数字:\n”);
    for(i=0;i<(sizeof a/sizeof a[0]);i++){
    scanf("%d",&a[i]);}
    sort(a,sizeof a/sizeof a[0]);
    printf(“排列之后的数字是:\n”);
    for(i=0;i<(sizeof a/sizeof a[0]);i++){
    printf("%d",a[i]);}
    printf("\n");
    return 0;
    }
    void sort(int array[],int n)
    {
    int i,j,k,temp;
    for(i=0;i<n-1;i++){
    k=i;
    for(j=i+1;j<n;j++){
    if(array[j]<array[k]){
    k=j;
    }
    }
    // temp=array[k];array[k]=array[i];array[i]=temp; //可以用swap代替
    swap(&array[k],&array[i]);
    }
    }
    void swap(int *ex1,int *ex2)
    { int mid;
    mid=*ex1;
    *ex1=*ex2;
    *ex2=mid;
    }

    收获

    在写完排序代码之后,我又有了一些新的体会:
    1,对指针的理解加深了,之前在输出排列完之后的数时我写的是
    printf("%d",&a[i]);
    结果输出的是十进制的地址,开始我还以为是算法错了,编译器也没有报错,后来才发现错了。但是通过之歌小错误,又加深了对printf的理解。
    2,sizeof a/sizeof a[0];这个方法最早我是在MOOC大学上翁恺老师的课堂上看到的,我个人觉得很巧妙,就学习借鉴过来了,下面简单介绍一下用法:sizeof a是数组所占的字节,而sizeof a[0]是首元素所占的字节。所以sizeof a/sizeof a[0]就是数组的长度。
    3,前面的这段代码只要修改一个符号就可以实现降序排列。

    展开全文
  • 排序问题_整数_升序

    2017-05-26 20:25:10
    写一个程序计算出,将1、2、3三种值的数字序列,我们将其排为升序。 输入第1行为数字的数量N(1≤N≤1000) 输入第2行到第N+1行,每行包括一个数字(1或2或3)。 输出包含一行,为排成升序后的数字序列。
  • 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->...

    题目

    给你一个链表数组,每个链表都已经按升序排列。
    请你将所有链表合并到一个升序链表中,返回合并后的链表。

    示例 1:
    输入:lists = [[1,4,5],[1,3,4],[2,6]]
    输出:[1,1,2,3,4,4,5,6]
    解释:链表数组如下:
    [
    1->4->5,
    1->3->4,
    2->6
    ]
    将它们合并到一个有序链表中得到。
    1->1->2->3->4->4->5->6

    示例 2:
    输入:lists = []
    输出:[]

    示例 3:
    输入:lists = [[]]
    输出:[]

    提示:
    k == lists.length
    0 <= k <= 10^4
    0 <= lists[i].length <= 500
    -10^4 <= lists[i][j] <= 10^4
    lists[i] 按 升序 排列
    lists[i].length 的总和不超过 10^4

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-k-sorted-lists

    思路

    1、每次循环添加一个节点,并将添加节点所在的链表移位,赋值到数组中;
    2、每次循环中遍历数组,寻找最小值所在的节点,即为添加节点;

    程序

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     struct ListNode *next;
     * };
     */
    
    
    struct ListNode* mergeKLists(struct ListNode** lists, int listsSize){
        int i, Min, iMin, izcnt = 0,iflag = 1;
        struct ListNode* head = NULL;
        struct ListNode* node = NULL;
        
        /*判断链表是否都为空*/
        iflag = 0;
        for(i=0;i<listsSize;i++){
            if(lists[i] != NULL){
                iflag = 1;
            }else{
                izcnt++;
            }
        }
        while(iflag){
            /*获取最小值的初始值*/
            for(i=0;i<listsSize;i++){
                if(lists[i] != NULL){
                    Min = lists[i]->val;
                    iMin = i;
                    break;
                }
            } 
            /*获取最小值和最小序列*/
            for(i=i+1;i<listsSize;i++){
                if(lists[i] != NULL){
                    iMin = Min > lists[i]->val ? i : iMin;
                    Min = Min > lists[i]->val ? lists[i]->val : Min;
                }
            } 
            /*连接链表*/
            if(head == NULL){
                head = lists[iMin];
                node = head;
            }else{
                node->next = lists[iMin];
                node = node->next;
            }
            /*移动链表*/
            lists[iMin] = lists[iMin]->next;
            /*记录空链表个数,全部为空时,停止循环*/
            if(lists[iMin] == NULL){
                izcnt++;
                if(izcnt == listsSize){
                    iflag = 0;
                }
            }
        }
        return head;
    }
    
    
    展开全文
  • #include<stdio.h> void sort(int *x,int n); int main() { int arr[10] = { 11,3,7,23,15,79,66,58,69,45 },i; sort(arr, 10); printf("排序结果如下:\n"); for (i = 0; i <... ...
    #include<stdio.h>
    void sort(int *x,int n);
    int main()
    {
        int arr[10] = { 11,3,7,23,15,79,66,58,69,45 },i;
        sort(arr, 10);
        printf("排序结果如下:\n");
        for (i = 0; i < 10; i++)
            printf("%d ", arr[i]);
        return 0;
    }
    void sort(int *x, int n)
    {
        int i, j, k, t;
        for (i = 0; i < n - 1; i++)
        {
            k = i;
            for (j = i + 1; j < n; j++)
                if (x[j] < x[k])
                    k = j;
            if (i != k)
            {
                t = x[i];
                x[i] = x[k];
                x[k] = t;
            }
        }
    }
    展开全文
  • 主要为大家详细介绍了C语言合并两个带头节点升序排列链表的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • c语言中实现冒泡排序: 简介:“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。冒泡排序应该是最常见的排序方法了,c语言初学者一定要学会使用。 冒泡排序(BubbleSort)的...

    在c语言中实现冒泡排序:

    简介:“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。冒泡排序应该是最常见的排序方法了,c语言初学者一定要学会使用。

    冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。

    核心思想:两两相邻元素进行比较。冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。

    具体排序如下:

    算法总结及实现:
    对于具有N个元素的数组R[n],进行最多N-1轮比较;

    了解了冒泡排序的基本概念和思想以后,我们又如何将上述思想转换成具体的代码呢?
    首先
     我们随机给出一组数据:
    int arr[9] = {1,43,8,71,32,90,45,12,41};

    我们的任务就是将上述9个数字排列成我们想要的升序

    这组数据升序就一定避免不了要进行交换,每次两两比较以后都会进行一次交换

    如何实现交换呢?其实很简单先贴代码:

    if (arr[j + 1] < arr[j])
    			{
    				tmp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = tmp;
    			}

    两个数把他想象成一瓶是酱油一瓶是醋,你手上一瓶酱油一瓶醋如何让他们交换瓶子呢?我们只要在拿出一个空瓶子就能很好的解决这个问题,把酱油放入空瓶然后将醋倒入酱油瓶,最后将酱油瓶倒入空瓶就完成了。上述代码便是依靠这样得原理实现的。

    其次:

    解决完交换的问题以后我们就应该要思考如何让代码跑起来让每次比较都能够进行连续的升序

    前面讲过,对于具有N个元素的数组R[n],进行最多N-1轮比较;在第一次for循环中我们给出的9组数据一共要进行八次比较,第二次循环中,我们每进行一次比较后就有一个数据已经完成了,故第一次循环中进行比较的数字在后续中就可以不再进行比较(因为它已经和每个数字都比过了)。

    int main() {
    	int arr[9] = {1,43,8,71,32,90,45,12,41};
    	int i = 0;
    	int tmp = 0;
    	int j = 0;
    	for(i = 0; i < 8; i++)//9组数据每次两两比较一共要进行8次
    	{
    		for(j= 0;j<8-i;j++)//每次比较完后,下一组的比较都比上一次比较要少一次(8-i)
    		{
    
    			if (arr[j + 1] < arr[j])
    			{
    				tmp = arr[j];
    				arr[j] = arr[j + 1];
    				arr[j + 1] = tmp;
    			}
    
    		}
    		
    	}

    最后: 

    如果你还想打印出来看看实际的升序结果可以加入以下代码:

    for (int z = 0; z < 9; z++)
    	{
    		printf("%d\n",arr[z]);
    	}

    打印出来的结果如下:

    一个简单的冒泡排序就写完了,如果大家还有不懂得话,可以留言一起讨论以下

    展开全文
  • c语言描述将两个字符串连在一起且按升序排列 #include #include #define P printf int n; char * x(char *p1,char *p2) { char temple,temple2; int i,j,k,e,d,f; /* char a[]={"aegikl"}; char b[]={...
  • C语言】数组排序法(升序

    千次阅读 2021-04-19 22:59:09
    一、冒泡排序 主要思路:相邻两个数的比较交换 #include<stdio.h> int main( ) { int a[10],temp=0; for(int i=0;i<10;i++) { scanf("%d",&a[i]); } for(int k=0;k<9;k++) ...
  • C语言选择排序(升序

    千次阅读 2020-05-05 00:19:43
    /*选择排序(升序) 步骤:1.在一组数列中,找到最小数,放到第一个位置上 2. 忽略第一个位置上的数,从其余的数列中找到最小值 ,放到第二个位置上 3.以此类推 n个数,进行n-1轮比较; */ #include <stdio.h>...
  • C语言选择排序法进行数据升序排序

    千次阅读 2019-09-20 14:02:17
    int main(void) { uint8_t array[]={12,24,10,23,18,15,50,86,100,32,28,60}; int i,j,min,t; for(i=0;i<sizeof(array)-1;i++) { min = i; for(j=i+1;j<sizeof(array);j++) ...
  • 利用快速排序方法的递归调用实现增序排列 (做笔记,便于复习) #include <stdio.h> int m,x,i,j; int h[50];//顺序表最大存储 creatb(int h[])//创建顺序表 { printf("input data:\n"); scanf("%d",&...
  • C语言实现冒泡排序算法(升序)

    千次阅读 2017-09-12 20:29:48
    升序或者降序来进行冒泡排序(注意万一在面试中,面试官有问到冒泡排序,要问清楚面试官是用什么顺序来进行冒泡排序的)这里默认是用升序来进行排序的。   2、冒泡排序思路(第一层)是先从第一个数开始冒泡...
  • int a[10]; int i,j,t; printf("input 10 numbers:\n"); for(i=0;i<10;i++){ scanf("%d",&... //一共排9趟序,因为最后一趟只剩一个数,不需要排 ... //每趟从第一个数开始排,第一趟排完将最大的一个数沉底...
  • c语言实现的字符串升序排序

    万次阅读 2017-05-08 18:59:27
    #include&lt;stdio.h&gt; #include&lt;string.h&gt; int main() { int n; scanf("%d", &amp;n); getchar(); char str[100][100]; for(int i = 0; i &... c...
  • if语句——单分支结构 if(判断条件) { 代码块儿 } if…else语句——双分支结构 if(判断条件) { 执行语句1 } else { 执行语句2 } if…else if…else语句——多分支结构 ...#include.
  • 先将两个数组进行合并,可以利用C语言的memcpy函数进行;  2. 将新数组进行冒泡排序;  3. 过滤掉重复元素; 代码如下: #include <stdlib.h> #include<string.h> //冒泡排序 void sortArray...
  • C语言 在一个升序排列的数组中插入一个数

    万次阅读 多人点赞 2020-05-12 03:22:59
    在一个升序排列的数组中插入一个数 (10分) 编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。 函数接口定义: void fun(int a[N],int number); 其中 a 和 number 都是用户传入的...
  • 随机输入一个整型数组,将其升序排列后输出。 #include<stdio.h> #define n 5 //数组的长度 int main() { int i,j,a[n],temp,flag; for(i=0; i<n; i++) { scanf("%d",&a[i]); } for(i=1; i&...
  • T155235 判断升序排列

    2020-11-09 21:43:53
    T155235 判断升序排列 题目描述: 思路: ①:题目要求读到文件末尾符为止,在读取文件时到达文件末尾会产生读入失败的现象,此时scanf会返回-1,而在C语言中使用EOF(End Of File)来代表-1。 ②:由于数据范围是...
  • /* 编写函数将两个升序排列的字符串融合成一个字符串, 融合后的字符串依然是升序排列的 */ #include&lt;stdio.h&gt; #include&lt;string.h&gt; int main(void) { char a[20],b[20],c[40];//a,b...
  • //冒泡排序(升序) //自定义函数部分,要求函数完成冒泡排序算法 void bubble_sort(int arr[],int sz){//将数组和数组长度两个参数进行传递,方便后续使用 int a=0; int b=0; int tmp=0; for(a=0;a;a++){//定义...
  • 将数组升序排列后,插入一个数,仍然保持升序排列。 先进性逆序排序 ```java` public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int[] ...
  • C语言选择排序算法(升序)

    千次阅读 2015-02-24 12:18:40
    处理思想: 对有n个数的序列(存放在数组a(n)中... 依次类推,选择了n-1次后,这个数列已按升序排列。 int j = 0, imin = 0, s = 0, a[10];  printf("\n input 10 numbers:\n");  for(int i
  • C语言 链表排序-升序

    千次阅读 2018-07-18 19:55:38
    对于输入的 n 个数据 num 进行排序,要求将输入的数据按 num升序建立带有表头结点的链表,且链表中不能有重复的数据。现在已经给出结点定义和程序框架,包括 main 函数和链表输出函数 outlist,请编写函数 sortlist ...
  • 输入一组元素为升序时没问题 可是输入降序元素时没有存储到程序中 帮忙修改,感谢指正![图片](https://img-ask.csdn.net/upload/201708/15/1502785922_370805.jpg)
  • 判断升序

    2021-10-31 21:53:47
    判断整数数组元素是否已经按升序排序。 #include<stdio.h> int main() { int prev,next;//这个prev和next很形象啊 int flag=0;//标志,不用多说了吧 scanf("%d",&prev); while(scanf("%d",&...
  • C语言——选择排序(升序、降序)

    千次阅读 2021-08-26 20:28:38
    程序(升序): #include<stdio.h> #include<stdlib.h> #include<time.h> /* 对用随机函数生产的10个整数 进行升序 ————选择排序 */ void p(int a[],int n) { int ..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,208
精华内容 4,083
关键字:

升序排列c语言

c语言 订阅