排序
1.选择排序
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
void SelectSort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; j < n; j++)
{
if (arr[i] > arr[j])
{
swap(arr, i, j);
}
}
}
} ——代码实现
1、冒泡排序
它重复地走访过要排序的元素列,依次比较两个相邻的元素
void BubbleSort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
swap(arr, j + 1, j);
}
}
}
}
void swap(int arr[], int x, int y)
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
} ——代码实现
3、插入排序
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据
void InsertSort(int arr[], int n)
{
int tempVal;
for (int i = 1, j; i < n; i++)
{
tempVal = arr[i];
for (j = i - 1; tempVal < arr[j] && j >= 0; --j)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = tempVal;
}
} ——代码实现
4、桶(基数)排序
这个排序真的非常巧妙,其实就是把本来一个未知数的值同时设置成了存储这个值所用的数组的下标,这样就可以直接输出最小或者最大值了(需要判断是否为0,如果是那就不需要输出)
void ShellSort(int arr[], int n)
{
int tempVal, j;
int jump = n >> 2;
while (jump != 0)
{
for (int i = jump; i < n; i++)
{
tempVal = arr[i];
for (j = i - jump; j >= 0 && tempVal < arr[j]; j -= jump)
{
arr[j + jump] = arr[j];
}
arr[j + jump] = tempVal;
}
jump = jump >> 1;
}
} ——代码实现
5.快排
在某些考试中好像不能用,快排就是借助sort函数将一个数组进行排序,一般默认是升序也就是从小到大,也可以通过定义cmp使他成为降序排列,优点是速度快,但是不稳定,要用sort函数需要些<algorithm>头文件。