几个简单的排序 source code
//选择排序
void chooseSort(unsigned char *list, int length)
{
int i,j,temp,minIndex;
//要遍历的次数
for(i = 0; i < length - 1; i++)
{
//设当前最小值序号
minIndex = i;
//把序列后面的数据作比较
for(j = i + 1; j < length; j++)
{
if(list[minIndex] > list[j])
{
minIndex = j;
}
}
temp = list[i];
list[i] = list[minIndex];
list[minIndex] = temp;
}
}
//冒泡排序
void bubbleSort(unsigned char *list, int length)
{
int i,j,temp;
for(i = 0; i < length; i++)
{
for(j = 0; j < length - i - 1; j++)
{
if(list[j+1] < list[j])
{
temp = list[j + 1];
list[j + 1] = list[j];
list[j] = temp;
}
}
}
}
//快速排序
void quickSort(unsigned char *list, int left, int right)
{
if(left < right)
{
//递归调用quickSort
int i = division(list,left,right);
quickSort(list, left, i-1);
quickSort(list, i+1, right);
}
}
int division(unsigned char *list,int left,int right)
{
if(left>right)
return -1;
int base = list[left];
//任何情况下左指针比右指针要小
while(left < right)
{
//从右指针向左移动,找到比base要大(或等于)的值
while((left < right) && (list[right] >= base))
right -= 1;
//把该值替代左指针指向的值
list[left] = list[right];
//从左指针向右移动,找到比base要小(或等于)的值
while((left < right) && (list[left] <= base))
left += 1;
//把该值替代右指针的值
list[right] = list[left];
}
//把base插入当前左指针指向的地方
list[left] = base;
return left;
}
测试后觉得 快速排序 最快。
浙公网安备 33010602011771号