1.堆排序
关键步骤:
//nowIndex 为当前要调整的非叶结点,tail为最后一个叶结点
private void downAdjust(int []arr,int nowIndex,int tail)
{
int i=nowIndex;
int j=nowIndex*2+1;
//当j>tail时,意味着以nowIndex为祖先的所有子节点都遍历了,直接跳出循环
while (j<=tail)
{
//j指向值最小的i的后代节点
if (j+1<=tail&&arr[j]>arr[j+1])
j++;
if (arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
i=j;
j=i*2+1;
}
else
break;
}
}
2.桶排序
参考:https://blog.csdn.net/qq_27124771/article/details/87651495
3.归并排序
参考:https://www.cnblogs.com/chengxiao/p/6194356.html
4.快速排序
void quick_sort(int a[], int l, int r)
{
if (l < r)
{
int i,j,x;
i = l;
j = r;
x = a[i];
while (i < j)
{
while(i < j && a[j] > x)
j--; // 从右向左找第一个小于x的数
if(i < j)
a[i++] = a[j];
while(i < j && a[i] < x)
i++; // 从左向右找第一个大于x的数
if(i < j)
a[j--] = a[i];
}
a[i] = x;
quick_sort(a, l, i-1); /* 递归调用 */
quick_sort(a, i+1, r); /* 递归调用 */
}
}