1插入排序
描述:
1.将数组a从左到右插入数值。
2.将数组下标为k∈(1,size-1)的数值作为最左侧待排序的元素。
3.遍历数组下标为j∈(0-k-1)的元素,若存在大于a[k]的值,则将a[k]的值赋值给a[j],并将下标为j到k-1的元素全部后移一位。
void InsertSort(int a[],int size)
{
for (int i = 1; i < size; i++)
{
//a[i]是最左侧的无序元素,每次循环将a[i]放到合适的位置上
for (int j = 0; j < i; j++)
{
if (a[j] > a[i])
{
//把a[i]放到a[j],下表j到i-1向后移动一位
int temp = a[i];
for (int k = j; k < i; k++)
{
a[k - 1] = a[k];
}
a[j] = temp;
break; //别忘了break
}
}
}
}
2.选择排序
描述:
1.冒泡排序是比较相邻位置的两个数,而选择排序是按顺序比较,找最大值或者最小值;
2.冒泡排序每一轮比较后,位置不对都需要换位置,选择排序每一轮比较都只需要换一次位置;
3.冒泡排序是通过数去找位置,选择排序是给定位置去找数;
#include "iostream"
#include "SelectSort.h"
using namespace std;
void SelectSort(int a[],int size)
{
for (int i = 0; i < size; i++)
{
int min_index = i; //假定当前值为最小值
for(int j=i;j<size;j++)
{
if (a[j] <a[ min_index]) //未排序的数据中如果有比当前最小值大的,则记录数组下标j
{
min_index = j;
}
}
if (min_index != i)
{
int t = a[min_index];
a[min_index]=a[i];
a[i] = t;
}
}
}