简单的数组元素排序方法

目录

概要:

一、冒泡排序法(Bubble Sort)

实现方法:

代码示例:

二、选择排序法(Selection Sort)

实现方法:

代码示例:

写在最后:


概要:

本文会介绍两种简单常用的数组排序方法,,以及它们的实现方法和代码示例。

一、冒泡排序法(Bubble Sort)

实现方法:

冒泡排序法,顾名思义,相当于将元素上下排列,轻(小)者上浮,重(大)者下沉。是从最上端元素(第一位)开始由相邻数据两两比较达到排序效果。

(1)对每一对相邻的元素进行比较,若第一个比第二个大,则调换这两个元素的位置,依次两两比较直到数据的最后一对。

(2)重复n次(1)中操作,n为数组中元素的个数,由于每轮结束最后一位一定是最大的,故最后一位不用参与比较。

(3)一直到没有数据可比,输出排序后的数据。(或可设置一个变量来记录是否发生数据交换,若无,则已排序完成,可直接输出)

代码示例:

#include<stdio.h> 
int main() 
    {
	int n, m, i, j, temp;
	int arr[100];//定义一个数组;
    printf("请输入元素个数\n"); 
	scanf("%d", &n);    //n为元素的个数
    printf("请输入数据\n");
	for (i = 0; i < n; i++)
    {
		scanf_s("%d", &arr[i]);    //输入数据;
	}
 
	m = n;            //因为每进行一次第一轮循环,需要排序的数据都要“--”,因此定义变量m=n;
	for (i = 0; i < n; i++) 
    {
		int exchange = 0;           //记录这一轮会不会有数据的交换;
		for (j = 0; j < m-1; j++) 
        {
			if (arr[j] > arr[j + 1]) 
            {
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
				exchange = 1;
			}
		}
		m--;
		if (!exchange)  //若没有数据的交换,则数据已经排列完毕,跳出循环;
			break;
	}
	for (i = 0; i < n; i++)
    {
		printf("%d ", arr[i]);        //输出
	}
 
	return 0;
 
}

二、选择排序法(Selection Sort)

实现方法:

设一个数组中有n个元素,选择出n个元素中最小的一个数据放到第一位,再选择余下n-1个数据中最小的放到第二位,以此类推,达到排序效果。

(1)记录排序的位置,用该位置上的数据与其后数据各个比较,得出最小值赋予该位置。

(2)以此类推,找出对应1~n-1位位置的数据

(3)输出排序后的数组。

代码示例:

#include<stdio.h>
int main()
{
	int n,i,j,temp,pos; /*temp记录最小值,pos记录最小值位置*/
	printf("请输入要排列几个数据\n");
	scanf("%d",&n);
	int arr[n];            /*定义一个n个元素的数组*/  
	printf("请输入各个数据\n");     
	for(i=0;i<n;i++)       /*输入各个数据*/
	{
		scanf("%d",&arr[i]);
	}
	for(i=0;i<n-1;i++)         /*n个数排序,则只需执行n-1次*/
	{
		temp=arr[i];         /*记录此时的值为最小值*/
		pos=i;               /*记录该元素的位置*/
		for(j=i+1;j<n;j++)  /*与后面的元素逐个比较*/
		{
			if(arr[j]<temp)  /*若temp中的数大于下一位,则temp赋值为下一位*/
			{
				temp=arr[j];
				pos=j;
			}
		}
		arr[pos]=arr[i];      /*交换两个元素的值*/
		arr[i]=temp;
	}
	for(i=0;i<n;i++)         /*输出排序后的数组*/
	{
		printf("%d ",arr[i]);
	}
	return 0;
 } 

写在最后:

未完待续,小白会随着深入学习加入其他排序方法,感谢支持!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醋蘸年糕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值