排序
排序就是给已有的数据容器按照自己想要的顺序给数据排序。
冒泡排序
思想:一个一个元素拿出来,与每一元素进行比较,如果是大于的就交换元素,继续比较。
给数组排序
int a[10];
int n=sizeof(a)/sizeof(a[0]);
for(int i=0:i<n-1;i++)//不用与自己比较次数-1
{
for(int j=0;j<n-i-1;j++)//这个元素比较一轮之后,当前比较一轮中最大的元素,就不用再次比较了
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=a[j];
}
}
}
给std::vector排序
vector是有自己的排序的算法的。stl也是有排序算法的。这里我们使用冒泡法排序一下。
std::vector<int>ve_uint{ 1, -2, 3,-4, 5, -6, 7, -8, -9, 10 };
for (int i = 0; i < ve_uint.size() - 1; i++)
{
for (int j = 0; j < ve_uint.size() - i - 1; j++)
{
if (ve_uint[j] > ve_uint[j + 1])
{
int temp = ve_uint[j];
ve_uint[j] = ve_uint[j + 1];
ve_uint[j + 1] = temp;
}
}
}
给std::vector<自定义的数据结构>排序
这里的就是比较贴近日常我们排序使用的自定义的排序顺序。
int main()
{
struct student
{
int age;
int level;
bool operator>(student b)
{
if (age > b.age)
{
return true;
}
else if (age == b.age)
{
if (level >= b.level)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
};
//准备数据
std::vector<student>ve_stu;
student stu1{ 10,15 }; ve_stu.push_back(stu1);
student stu2{ 11,11 }; ve_stu.push_back(stu2);
student stu3{ 10,19 }; ve_stu.push_back(stu3);
student stu4{ 13,10 }; ve_stu.push_back(stu4);
student stu5{ 17,18 }; ve_stu.push_back(stu5);
student stu6{ 19,19 }; ve_stu.push_back(stu6);
student stu7{ 18,10 }; ve_stu.push_back(stu7);
student stu8{ 10,10 }; ve_stu.push_back(stu8);
student stu9{ 12,15 }; ve_stu.push_back(stu9);
student stu0{ 14,10 }; ve_stu.push_back(stu0);
for (int i = 0; i < ve_stu.size() - 1; i++)
{
for (int j = 0; j < ve_stu.size() - i - 1; j++)
{
if (ve_stu[j] > ve_stu[j + 1])
{
student stu;
stu = ve_stu[j];
ve_stu[j] = ve_stu[j + 1];
ve_stu[j + 1] = stu;
}
}
}
for (int i = 0; i < ve_stu.size(); i++)
{
printf("%d\t%d\n", ve_stu[i].age, ve_stu[i].level);
}
printf("\n");
return 0;
}
今天先写到这里,有时间再总结其他的排序。
Python实现冒泡排序与自定义结构排序详解
3644

被折叠的 条评论
为什么被折叠?



