排序算法
来源:互联网 发布:赵丽颖演技 知乎 编辑:程序博客网 时间:2024/06/03 18:38
void quicksort(int arr[], int length){
if(!arr || length < 2) // 注意length 是小于2,而不是小于1
return;
else if(length == 2) //当长度为2时,一定要进行判断返回,否则递归无法结束
{
if (arr[0] > arr[1])
{
int t = arr[0];
arr[0] = arr[1];
arr[1] = t;
}
return;
}
int left = 0;
int right = length - 1;
int flag = arr[length / 2];
while(left < right)
{
while (arr[left] < flag && left < right) //如果 left >= right, 则提前结束
left++;
while (arr[right] > flag && left < right)
right--;
if (left < right)
{
int t = arr[left];
arr[left] = arr[right];
arr[right] = t;
left++;
right--;
}
}
quicksort(arr, right+1); //这么写,表示中间相同的部分不需要再进行排序
quicksort(arr+left, length-left);
}
}
void bubblesortpro(int arr[], int length)
{
if (!arr || length < 2)
return;
int size = length;
while(size > 1)
{
int newsize = 0;
for (int i = 0; i < size-1; ++i)
{
if (arr[i] > arr[i+1])
{
newsize = i+1;
int t = arr[i];
arr[i] = arr[i+1];
arr[i+1] = t;
}
}
size = newsize;
}
}