几个简单的排序 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;
}

  测试后觉得 快速排序 最快。

posted @ 2015-03-26 10:40  oMengLvRong  阅读(122)  评论(0编辑  收藏  举报