存放字符串的指针数组相关应用

字符指针数组的原地排序

#include "stdafx.h"
#include <string.h>

//冒泡法排序
void popSort(int* p, int n);

int _tmain(int argc, _TCHAR* argv[])
{

	//char* array[10];//指针数组 放地址的(数组中的各个元素都是字符指针)

	char* name[] = { "IBM", "Apple", "Oracle", "MicroSoft",
		"Google", "Facebook", "SpaceX", "Intel" };

	for (int i = 0; i < sizeof(name) / sizeof(name[0]); i++)
		printf("%s\n", name[i]);

	//int array[10] = { 8, 88, 7, 567, 768, 5, 78, 45, 77, 122 };

	//popSort(array, 10);

	//for (int i = 0; i < 10; i++)
	//{
	//	printf("%d\n", array[i]);
	//}

	printf("========================================\n");
	//原地排序
	int size = sizeof(name) / sizeof(name[0]);
	for (int i = 0; i<size - 1; i++)
	{
		for (int j = 0; j<size - 1 - i; j++)
		{
			if (strcmp(name[j], name[j + 1])>0) 
			//相当与比较这俩地址下的字符串的大小
			{
				//调整的只是 数组中 存储字符串地址元素的位置
				name[j] = (char*)((int)name[j] ^ (int)name[j + 1]);
				name[j+1] = (char*)((int)name[j] ^ (int)name[j + 1]);
				name[j] = (char*)((int)name[j] ^ (int)name[j + 1]);
			}//异或运算(带^的运算) 必须是整型int 所以第一次强转
		}    //name为字符指针型数组,需要char*进行第二次强转
	}

	for (int i = 0; i<sizeof(name) / sizeof(name[0]); i++)
		printf("%s\n", name[i]);

	return 0;
}

void popSort(int* p, int n) //实现
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (p[j] > p[j + 1])
			{
				p[j] = p[j] ^ p[j + 1];
				p[j + 1] = p[j] ^ p[j + 1];
				p[j] = p[j] ^ p[j + 1];
			}
		}
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值