没什么难的,看代码感觉不容易,自己上手慢慢写也能写出来
#include<stdio.h>
#include<stdlib.h>
void BubbleSort(int* a, int size);
void Choose_Sort(int* a, int size);
void InsertSort(int* a, int size);
int BinSearch(int* a, int n, int SearchElement);
int main()
{
int a[5] = { 4,6,3,8,7 };
InsertSort(a, 5);
for (int i = 0; i < 5; i++)
{
printf("%d",a[i]);
}
}
void BubbleSort(int*a,int size)
{
int Tmp;
int j;
for (int i = size - 1; i > 0; i--)//循环次数
{
j = 0;
{
while (j < i)
{
if (a[j] > a[j + 1])
{
Tmp = a[j + 1];
a[j + 1] = a[j];
a[j] = Tmp;
}
j++;
}
}
}
}
void Choose_Sort(int* a, int size)
{
int Tmp;
int Min;
for (int i = 0; i < size - 1; i++)
{
Tmp = a[i];
Min = i;
for (int j = i+1; j < size; j++)
{
if (a[Min] > a[j])
{
Min = j;
}
}
a[i] = a[Min];
a[Min] = Tmp;
}
}
void InsertSort(int* a, int size)//
{
int Tmp;
int p;
for (int i = 1; i <size; i++)
{
Tmp = a[i];
for (p = i - 1; a[p] > Tmp && p >= 0; p--)
{
a[p+1] = a[p];
}
a[p + 1] = Tmp;
}
}
int BinSearch(int* a, int n,int SearchElement)
{
int Right = n-1;
int Left = 0;
int mid = (Right+Left)/ 2;
while (Left <= Right)
{
if (a[mid] > SearchElement)
{
Right = mid - 1;
mid = (Right + Left )/2;
}
else if (a[mid] == SearchElement)
return (mid);
else
{
Left =mid + 1;
mid = (Right + Left) / 2;
}
}
return -1;
}
插入排序像扑克牌一样,而且插入排序和冒泡排序每交换一次顺序减少一个逆序对