C语言选择排序程序


2022年3月6日, Learn eTutorial
2109

为了更好地理解,我们始终建议您学习下面列出的C语言编程基础主题

如何在C语言中执行选择排序?

在这个C程序中,我们需要使用**选择排序**来对元素进行排序。选择排序是C语言编程中最简单的排序技术之一。在选择排序中,我们有两个子列表,一个是已排序的,另一个是待排序的。最初,已排序列表为空,未排序列表包含所有元素,然后开始排序以找到最小或最大的元素。根据顺序,将最小元素与列表中最左边的元素交换位置。现在,已排序子列表包含一个元素,最终所有元素都会从未排序列表中进入已排序子列表。在这个C程序中,我们使用了两个函数,一个用于找到最大元素,另一个用于按照我们需要的顺序对元素进行排序。`findmax` 函数找到数组中最大的元素,然后我们调用 `exchange array` 函数来交换位置。

这个C程序的逻辑是:首先读取用户想要排序的数字数量。然后使用`for`循环将数字读入数组。接着显示输入数组元素。之后,我们必须开始排序过程。为了排序,我们调用`exchange()`函数。`exchange()`函数首先通过调用另一个函数`findmax()`找出数组中最大的数字,并将最大的数字放在数组的最后一个位置。现在数组的最后一个位置已排序。现在我们将继续对数组的`n-1`个元素进行排序。如果找到倒数第二个元素,我们将重复对`n-2`个元素进行相同的过程,依此类推。最后,我们将得到最小的数字在顶部。
 

算法

步骤 1:包含头文件以在 C 程序中使用内置头文件。

步骤2:声明一个数组和一个变量**N**。数组用于存储数字,**N**用于存储数字的限制。

步骤3:声明函数`int findmax(int b[10], int k)`和`void exchang(int b[10], int k)`。

步骤4:使用`for`循环将数组元素读入数组。

步骤5:使用`for`循环显示数组元素。

步骤6:调用函数`exchang(array, N)`来对数组进行排序。

步骤7:现在使用`for`循环显示已排序的数组元素。

函数`int findmax(int b[10], int k)`

步骤1:声明变量**max**、**j**,并设置**max=0**。

步骤2:使用`for`循环,**j=1**,条件**j<=k**,执行步骤3。

步骤3:检查**b[j] > b[max]**,如果为真,则**max=j**。重复步骤2。

步骤4:返回**max**。

函数`void exchang(int b[10], int k)`

步骤1:声明变量`temp`、`big`、`j`。

步骤2:使用`for`循环,`j=k-1`,条件`j>=1`,执行步骤3。

步骤3:通过调用`findmax(b,j)`找出最大数字的位置。

步骤4:现在使用**交换**方法将最大元素放置在`j`的位置。

步骤5:将`j`减1,检查条件`j>=1`并重复步骤3。

C 语言源代码

                                          #include <stdio.h>


void main()
{
  int array[10];
  int i, j, N, temp;
  int findmax(int b[10], int k); /* function declaration */
  void exchang(int b[10], int k);
  printf("Enter the value of N\n");
  scanf("%d", & N);
  printf("Enter the elements one by one\n");
  for (i = 0; i < N; i++)
  scanf("%d", & array[i]);
  printf("Input array elements...\n");
  for (i = 0; i < N; i++)
  {
    printf("%d\n", array[i]);
  }

  /* Selection sorting begins */

  exchang(array, N);
  printf("Sorted array is...\n");
  for (i = 0; i < N; i++)
  {
    printf("%d\n", array[i]);
  }

} /* End of main*/

/* function to find the maximum value */

int findmax(int b[10], int k)
{
  int max = 0, j;
  for (j = 1; j <= k; j++)
  {
    if (b[j] > b[max])
    {
      max = j;
    }
  }
  return (max);
}
void exchang(int b[10], int k)
{
  int temp, big, j;
  for (j = k - 1; j >= 1; j--)
  {
    big = findmax(b, j);
    temp = b[big];
    b[big] = b[j];
    b[j] = temp;
  }
  return;
}
                                      

输出

Enter the value of N
5

Enter the elements one by one
45
12
90
33
78
Input array elements
45
12
90
33
78

Sorted array is
12
33
45
78
90