个人主页:Lei宝啊
愿所有美好如期而遇
前言:
在我们的生活中,无处不在用到排序,比如说成绩的排名,淘宝,京东等等商品在各个方面的排序,这样看来一个好的算 法很重要,接下来我们要先了解一下比较挫的两个排序算法。
冒泡排序:
思路:
我们要做的就是将一组数据升序或者降序排列,使用两个循环,里面的循环在升序情况下,将最大的数字排到最后,为一次排序,外面的循环控制排序次数。
图解:
代码:
void Bubble_Sort(int* arr, int n)
{
int temp = 0;
for (int i = 0; i < n - 1; i++)
{
int flag = 0;
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1;
}
}
if (flag == 0)
{
break;
}
}
}
选择排序:
思路:
类似于冒泡排序,也需要两个循环,我们需要一个开始位置和末尾位置,即begin和end,然后选出最小的数放在begin位置,最大的数放在end位置,然后同时往中间走,重复操作,直到相遇。
图解:
代码:
void SelectSort(int* arr, int n)
{
int left = 0;
int right = n - 1;
while (left < right)
{
int max = left;
int min = left;
for (int i = left + 1; i <= right; i++)
{
if (arr[max] < arr[i])
{
max = i;
}
if (arr[min] > arr[i])
{
min = i;
}
}
Swap(&arr[max], &arr[right]);
if (min == right)
{
min = max;
}
Swap(&arr[min], &arr[left]);
left++;
right--;
}
}