排序算法解析编码
#一家人就是要整整齐齐的,所以即使有些算法比较简单,我也要把他们码出来。
1,冒泡排序
冒泡排序,轻的往上浮,重的往下沉,遍历一遍数组即可。时间复杂度为O(n*n)
void Bubble_Sort(int *a,int length)
{
for(int i=0;i<length;i++)
{
for(int j=0;j<length-i-1;j++)
{
if(a[j+1]<a[j])
{
int temp;
swap(&a[j+1],&a[j]);
}
}
}
}
2,快速排序
是的,第二个是快速排序,其实你如果熟悉了算法,你会发现,快速排序和冒泡排序很像哦。
void Quick_Sort(int start,int end,int *a,int length)
{
if(start>end){
return;
}
int i=start;
int j=end;
int temp=a[i];
while(i<j)
{
while(i<j&&temp<a[j]) j--;
if(i<j)
{
a[i]=a[j];
i++;
}
while(i<j&&temp>a[i]) i++;
if(i<j)
{
a[j]=a[i];
j--;
}
}
a[i]=temp;
if(i>start)
{
Quick_Sort(start,i-1,a,length);
}
if(i<end)
{
Quick_Sort(i+1,end,a,length);
}
}
3,插入排序
将单个数据插入到有序数据里是最简单的哦
void Insert_Sort(int *a,int length)
{
int temp=0;
for(int i=0;i<length-1;i++)
{
temp=a[i+1];
int j=i;
while(j>-1&&temp<a[j])
{
a[j+1]=a[j];
j--;
}
a[j+1]=temp;
}
}
4,希尔排序
这个排序算是最简单的升级了,不过就是生成增量数组时候有点麻烦,不过也很简单了
`void Shell_Sort(int *d,int dlength,int *a,int length)
{
int delta;
int temp;
for(int i=0;i<dlength;i++)
{
delta=d[i];
for(int i=0;i<length-delta;i+=delta)
{
temp=a[i+delta];
int j=i;
while(j>-1&&temp<a[j])
{
a[j+delta]=a[j];
j-=delta;
}
a[j+delta]=temp;
}
}
}`