数字的排序

简介: 原理:(升序)将一串乱序数组中的数字元素进行相邻两两比较,如果第一个数字大于第二个数字,进行交换。然后继续进行第二个和第三个比较,如果第二个数比第三个数大,进行交换,反之则继续下一次比较。数组进行第一次全数组比较将得到数组中最大的数字放在数组最后。

C语言中的数字排序法有很多:


1.冒泡排序法


2.选择排序法


3.比较排序法


4.快速排序法


......


冒泡排序法


原理:(升序)将一串乱序数组中的数字元素进行相邻两两比较,如果第一个数字大于第二个数字,进行交换。然后继续进行第二个和第三个比较,如果第二个数比第三个数大,进行交换,反之则继续下一次比较。数组进行第一次全数组比较将得到数组中最大的数字放在数组最后。然后进行第二次数组大比较,减去第一轮得到的最大数字得到第二大的数字放到数组倒数第二位。以此类推,将乱序数组由小到大排序。


以下为实践程序


#include<stdio.h>
void cmd(int num[])
{
  int a = 1;
  int i = 0;
  int t;
  for (i = 1; i < 10; i++)
  {
    for (int j = 0; j < 10 - i; j++)
    {
      if (num[j] > num[j + 1])
      {
        a = 0;
        t = num[j];
        num[j] = num[j + 1];
        num[j + 1] = t;
      }
    }
    if (a == 1)
      break;
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
  {
    printf("%d ", num[i]);
  }
  return 0;
}

447550111b944f098338b2c289e45882.png


479ca20fb88d4e72b5178d452a47a48b.png


选择排序法


原理:(升序)将乱序数组从将第一个数字确定与后面的数字挨个比较,如果第一个数字比后面比较的数大就交换,反正则继续比较,第一次全部比较完得到最小的数字在第一位。进行第二轮比较,从第二个数开始,与后面的数进行比较得到第二小的数放在第二位。以此类推则可得到升序的数组。


见代码


#include<stdio.h>
void cmd(int num[])
{
  int t;
  for (int i = 0; i < 9; i++)
  {
    for (int j = i + 1; j < 10; j++)
    {
      if (num[i] > num[j])
      {
        t = num[j];
        num[j] = num[i];
        num[i] = t;
      }
    }
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
  {
    printf("%d ", num[i]);
  }
  return 0;
}

a26b9b270e124e4894907c2b8aca906d.png

762cd2252c8c4694bad87ea4f315d950.png


比较排序法


原理:(升序) 在一个乱序数组中,先将第一个数的下标记住,然后和剩下的数字进行比较,如果第一个数大于剩下的数,将大于第一个数的角标进行交换,找到最小数的角标后,如果不在第一位时,则将位置互换,将最小的数字放到最左边,以此类推,将得到完整升序数列。


见代码:


#include<stdio.h>
void cmd(int* p)
{
  int t;
  int a;
  for (int i = 0; i < 10; i++)
  {
    a = i;
    for (int j = i; j < 10; j++)
    {
      if (p[a] > p[j])
        a = j;
    }
    if (a != i)
    {
      t = p[i];
      p[i] = p[a];
      p[a] = t;
    }
  }
}
int main(void)
{
  int num[10];
  for (int i = 0; i < 10; i++)
  {
    scanf("%d", &num[i]);
  }
  cmd(num);
  for (int i = 0; i < 10; i++)
    printf("%d ", num[i]);
  return 0;
}


8ee84ad0b172434daf85fb8725e24a9b.png


以上是三种比较常见的C语言排序方法!!!  

目录
相关文章
|
3月前
输入三个数从小到大排列
输入三个数从小到大排列
23 0
|
2月前
|
算法
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
现有‘abcdefghijkl’12个字符,将其所有的排列按字典序进行排序,给出任意一组排列,说出这租排列在所有排列中是第几小的
16 1
|
3月前
|
算法 C++
Acwing.51 数字排列(全排列)
Acwing.51 数字排列(全排列)
|
3月前
每日一题(づ ̄3 ̄)づ╭❤~(数字在升序数组中出现的次数,整数转换)
每日一题(づ ̄3 ̄)づ╭❤~(数字在升序数组中出现的次数,整数转换)
21 0
|
3月前
|
搜索推荐 C语言
整数排序
整数排序
【剑指offer】-数字在排序数组中出现的次数-32/67
【剑指offer】-数字在排序数组中出现的次数-32/67
|
12月前
wustojc4002三个整数排序
wustojc4002三个整数排序
32 0
|
算法 C语言
剑指Offer 第53题:数字在升序数组中出现的次数
剑指Offer 第53题:数字在升序数组中出现的次数
123 0
剑指Offer 第53题:数字在升序数组中出现的次数
对一个list取前M个数字和后M个数字,形成两个列表
对一个list取前M个数字和后M个数字,形成两个列表
71 0