冒泡排序
思想:
冒泡排序的思想比较简单,就是两两数据进行比较,大的往后走,每循环一次就确定一个数的位置,就犹如扔石头,越重的石头落入海底越深,上图中第一次循环8的位置就确定了,所以下一次循环的个数就可以减一
具体代码实现:
void BubbleSort(int *arr,int len)
{
int tmp = 0;
for(int i = 0;i < len -1;i++)
{
for(int j = 0;j < len - i -1;j++)
{
if(arr[j] > arr[j+1])
{
tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
插入排序
思想:
插入排序的主要思想分为三步:第一先找到位置,第二挪动位置,第三插入数据;具体过程如下图:
定义i和j指针,将i指向的数据放入tmp中,比较j指针的数据和tmp的大小,如果j指向的数据小于tmp,就把j指针减一,若是一直小于tmp就一直比较到j为0时停止,否则就找到位置,挪动j到i之间数据的位置,在将tmp的数据插入即可
具体代码实现如下:
void InsertSort(int *arr,int len)
{
int i = 0;
int j = 0;
int k = 0;
int tmp = 0;
for(i = 1;i<len;i++)
{
tmp = arr[i];
for(j = i-1;j>=0;j--)
{
if(arr[j] > tmp)
{
break;
}
}
for(k = i-1;k>=j;k--)
{
arr[k+1] = arr[k];
}
}
arr[j] = tmp;
}
上述代码根据初始思路编写,但当需要插入的位置为0号下标时就会出错,例 1 2 0,当j=0时循环继续,接下来j就会减一,那么j的位置就会变成-1,越界,所以提倡使用下面的代码:
void Insert_Sort(int * arr,int len)
{
int i = 0;
int j = 0;
int tmp = 0;
for(i = 1;i<len;i++)
{
tmp = arr[i];
for(j = i-1;j>=0;j--)
{
if(arr[j] <= tmp)
{
break;
}
else
{
arr[j+1] = arr[j];
}
}
}
arr[j+1] = tmp;
}