字符指针数组的原地排序
#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];
}
}
}
}