利用指针对字符串排序(冒泡)

第一种:指针的指针
注:char *arr[] = { "dddd", "cccc", "vvvv", "aaaa" };

此定义字符串被保存在字符常量区,所以不可以修改,只能修改指针的顺序

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

void str_sort(char **arr, int size)
{
	assert(arr);
	int i = 0;
	for (i = 0; i < size - 1; i++)
	{
		int flag = 0;
		int j = 0;
		for (j = 0; j < size - 1 - i; j++)
		{
			if (strcmp(*(arr+j), *(arr+j+1))>0)
			{
				flag = 1;
				char *buf = NULL;   //修改指针
				buf = *(arr + j);
				*(arr + j) = *(arr + j + 1);
				*(arr + j + 1) = buf;
			}
		}
		if (flag == 0)
		{
			break;
		}
	}
}

int main()
{
	char *arr[] = { "dddd", "cccc", "vvvv", "aaaa" };
	int size = sizeof(arr) / sizeof(arr[0]);

	str_sort(arr, size);
	int i = 0;
	for (i = 0; i < size; i++)
	{
		printf("%s ", arr[i]);
	}
	system("pause");
	return 0;
}
第二种:指针数组
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>

void str_sort(char (*arr)[10], int size)
{
	assert(arr);
	int i = 0;
	for (i = 0; i < size - 1; i++)
	{
		int j = 0;
		for (j = 0; j < size - 1 - i; j++)
		{
			if (strcmp(*(arr + j), *(arr + j + 1))>0)
			{
				char buf[10] = {0};
				strcpy(buf, *(arr + j));
				strcpy(*(arr + j), *(arr + j + 1));
				strcpy(*(arr + j + 1), buf);
			}
		}
	}
}

int main()
{
	char arr[][10] = { "ddd", "cccc", "vvvv", "aaaa", "rrrr", "ssss", "cccc", "aaaa" };
	int size = sizeof(arr) / sizeof(arr[0]);

	str_sort(arr, size);
	int i = 0;
	for (i = 0; i < size; i++)
	{
		printf("%s ", arr[i]);
	}
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41318405/article/details/80216163