您的位置:首页 > 其它

排序算法

2015-09-20 09:43 253 查看
选择排序:最直接的排序算法,每次选择一个最大(最小)的元素放到应该的位置

//选择排序
	for(int i=0;i<len;i++)
	{
		int t = i;
		for (int j=i;j<len;j++)
		{
			if (arr[t] > arr[j])
			{
				t = j;
			}
		}
		int temp = arr[i];
		arr[i] = arr[t];
		arr[t] = temp;
	}


冒泡排序:每次只能比较相邻的两个元素,如果不合适就交换,适用于只有少量数据,没有顺序的场合

//冒泡1
	for (int i=0;i<len;i++)
	{
		for (int j=0;j < len-1-i; j++)
		{
			if (arr[j] > arr[j+1])
			{
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}

	//冒泡2
	bool swap = false;
	do 
	{
		swap = false;
		for (int i=0;i<len-1;i++)
		{
			if (arr[i] > arr[i+1])
			{
				int temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
				swap = true;
			}
		}
	} while (swap);


插入排序:首先,将头两个元素排序,然后,依次将每个元素排到正确的位置,直到所有的元素都排完

//插入排序
	for(int i=1;i<len;i++)
	{
		int t = arr[i];
		int j;
		for (j=i;j>0 && t < arr[j-1];j--)
		{
			arr[j] = arr[j-1];
		}
		arr[j] = t;
	}


快速排序(n*logn):

1、效率最高的排序算法

2、选出一个分解值,把数组分成两个部分

3、大于等于分解值的元素集中到数组的某部分,小于分解值的元素集中到另一部分

4、对分成的部分分别做同样的操作

void sort(int a[],int low,int high)
{
	if (low > high)
	{
		return ;
	}
	int first = low;
	int last = high;
	int key = a[first];
	while(first < last)
	{
		while(first < last && a[last] >= key)
		{
			last--;
		}
		a[first] = a[last];

		while(first < last && a[first] <=key)
		{
			first++;
		}
		a[last] = a[first];
	}
	a[first] = key;

	sort(a,low,first-1);
	sort(a,first+1,high);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: