利用指针的动态分配内存空间的冒泡排序
1、#include<iostream>
using namespace std;
void sort(char *name[], int n)
{
char *tmp;
int i, j;
for (i = 0;i < n - 1;i++)
{
for (j = 1;j < n;j++)
{
if (strcmp(name[j-1],name[j]) > 0)
{
tmp = name[j];
name[j] = name[j - 1];
name[j - 1] = tmp;
}
}
}
}
void print(char *name[], int n)
{
int i = 0;
char *p;
p = name[0];
while (i < n)
{
p = *(name + i++);
cout << p << endl;
}
}
int main()
{
char *name[] = { "mingri", "soft", "C++", "mr" };
int n = 4;
print(name, n);
sort(name, n);
cout << "排序后:" << endl;
print(name, n);
return 0;
}
1、关键函数为sort,算法的原理如下:
1. 比较相邻的元素:
strcmp(name[j-1],name[j]。
2.如果第一个比第二个大,就交换他们两个:
tmp = name[j];
name[j] = name[j - 1];
name[j - 1] = tmp;
3.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个:
嵌套for里的第一个for
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较:
嵌套for里的第二个for