选择、冒泡排序法、数组循环移动及逆序及数组删除元素输出核心步骤

本文详细介绍了C语言中的选择排序法、冒泡排序、数组循环移动(包括右移、左移)、逆序输出以及删除重复元素的实现方法,为初学者提供基本的数组操作指导。
摘要由CSDN通过智能技术生成

选择排序法

从小到大排序的核心

for (i = 0; i < n - 1; i++)//选择排序法从小到大排序的核心步骤
{
	index = i;//index从第一项开始
	for (j = i + 1; j < n; j++)//枚举
	{
		if (a[i] < a[index])
		{
			index = i;
		}
	}
	temp = a[index];//交换
	a[index] = a[i];
	a[i] = temp;
}
	

从大到小排序的核心

for (i = 0; i < n - 1; i++)//选择排序法从小到大排序的核心步骤
{
	index = i;//index从第一项开始
	for (j = i + 1; j < n; j++)//枚举
	{
		if (a[i] > a[index])//改变这里即可
		{
			index = i;
		}
	}
	temp = a[index];//交换
	a[index] = a[i];
	a[i] = temp;
}

冒泡排序

从小到大排序的核心

for (i = 1; i < n; i++)//外循环只需要进行n-1次即可
{
	for (j = 0; j < n - 1; j++)//内循环也只需要进行n-1次
	{
		if (a[j] > a[j + 1])//枚举,依次比较前后两项,将最大项放在最后面
		{
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}

从大到小排序的核心

for (i = 1; i < n; i++)//外循环只需要进行n-1次即可
{
	for (j = 0; j < n - 1; j++)//内循环也只需要进行n-1次
	{
		if (a[j] < a[j + 1])//枚举,依次比较前后两项,将最小项放在最后面
		{
			temp = arr[j];
			arr[j] = arr[j + 1];
			arr[j + 1] = temp;
		}
	}
}

数组循环移动

法一、利用新的数组

int i;
int b[100];//n是数组的大小,m是右移的位数
for (i = 0; i < n; i++)
{
	b[i] = a[i];
	m = m % n;
	for (i = 0; i < n; i++)
	{
		a[(i + m) % n] = b[i];
	}
}

法二、直接在原数组的基础上修改

循环右移核心

int i, j;
int x; //n是数组的大小,m是右移的位数
for (i = 0; i < m; i++)//外循环控制移动次数
{
	x = a[n - 1];//将最后 一个数据储存起来
	for (j = n - 1; j > 0; j--)
	{
		a[j] = a[j - 1];//依次右移
	}
	a[0] = x;//将最后一项移到最前面
}

循环左移核心

int i, j;
int x; //n是数组的大小,m是右移的位数
for (i = 0; i < m; i++)//外循环控制移动次数
{
	x = a[0];//将第一个数据储存起来
	for (j = 0; j <n; j++)
	{
		a[j] = a[j + 1];//依次左移
	}
	a[n-1] = x;//将第一项移到最后面
}

数组逆序输出

法一、for循环核心

int i, j,temp;//temp常作为交换数据的一个中间变量
for (i = 0, j = size - 1; i < j; i++, j--)//size为数组的大小
{
	temp = a[i];
	a[i] = a[j];
	a[j] = temp;
}

法二、未知size的情况,逆序输出核心

int i = 0, j;
char a[max];//max为数组的大小
gets(a);//将数组赋值
for (i = 0; a[i]; i++);//获得素组的大小(其中包含了\0)
for (j = i - 1; j > 0; j--);//逆序输出
{
	printf("%c", a[j]);
}

法三、指针交换法

#include<stdio.h>
#include <string.h>
int main()
{
	char arr[1000] = { 0 };
	int len = strlen(arr);
	char* left = arr;
	char* right = arr + len - 1;
	while (left < right)
	{
		char* temp = left;
		*left = *right;
		left++;
		right--;
	}
	printf("%s\n", arr);
	return 0;
}

法四、直接交换法

#include <stdio.h>
#include <string.h>
#define MAX 1000
int main()
{
	char arr[MAX];
	int left = 0;
	int right = strlen(arr) - 1;
	while (left < right)
	{
		char temp = arr[left];
		arr[left] = arr[right];
		arr[right] = temp;
		left++;
		right--;
	}
	printf("%s\n", arr);
	return 0;
}

数组删除重复元素 

例题如下:

代码解析:

#include <stdio.h>
#define MAX 100
int main()
{
    int j, i, m, x, index, temp;
    char a[MAX];
    i = 0;
    while ((a[i] = getchar()) != '\n')
    {
        i++;
    }
    a[i] = '\0';
    for (i = 0; a[i] != '\0'; i++)
    {
        for (j = i + 1; a[j] != '\0'; j++)
        {
            if (a[i] == a[j])
            {
                for (m = i; a[m] != '\0'; m++)
                {
                    a[m] = a[m + 1];//如果前后有相同的元素,将见面的一项直接覆盖
                }
                j = i;//在往后面继续检验是否还有相同的
            }
        }
    }

    for (i = 0; a[i] != '\0'; i++)
    {
        index = i;
        for (j = i + 1; a[j] != '\0'; j++)
        {
            if (a[index] > a[j])
            {
                index = j;
            }
        }
        temp = a[index]; a[index] = a[i]; a[i] = temp;//进行排序
    }
    for (i = 0; a[i] != '\0'; i++)
    {
        putchar(a[i]);
    }
    putchar('\n');

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值