c语言 快速排序

c语言 快速排序 算法及实现
我们现在对6 1 2 7 9 3 4 5 10 8 进行快速排序
选左边第一个数作为基准数字
基本思想是对于除了基准数字的其他九个数字,大于基准数字的放在基准数字的右边,小于基准数字的放在基准数字的左边

具体实现过程
1. 以6位基准数字,从又往左看,若大于基准数字,则比较下一个数字
          例如8大于6,那么比较10 和 6, 10 大于 6 ,那么比较5 和 6, 5 小于6,此时停止右边的比较
2. 继续从左往右看, 若小于基准数字, 则比较下一个数字
          例如1 小于 6,比较 2 和6 , 2 小于 6, 比较7 和6, 7 大于 6,此时停止左边的比较
3. 交换右边停止位置的数和左边停止位置的数,这里是交换5 和 7;
          得到6 1 2 5 9 3 4 7 10 8
4. 继续比较7 左边的数据和基准数据的大小,直到满足1中的条件,停止。然后比较5 右边的数据和基准数据, 直到满足2的条件,停止。进行3的操作

5. 直到左边和右边相遇,将相遇处的数字和基准数字交换,第一轮排列结束
           这里的结果是  3 1 2 5 4 69 7 10 8

然后再分别对于相遇点左右两边的数据重复1-5的操作,直到排列结束(结束条件见代码)

#include 

using namespace std;

//快排函数
void quicksort(int * a ,  int left, int right); 

int main(void)
{
	int n;
	cin >>n;
	int a[101] = {0};

	for(int i=0; i> a[i];
	}

	int left = 0;
	int right = n-1;
	//递归排序
	quicksort(a, left, right);

	for(int j=0; j right)//结束条件
		return ;
	while(i != j)
	{//一直进行直到ij相遇
		while(a[j] >= temp && i < j)
		{//从最右边开始比较//必须的//如果大于基准数据,那么j--,否则,开始左边的比较
			j--;
		}
		while(a[i] <= temp && i < j)
		{//如果小于基准数据,i++, 否则交换a[i], a[j]
			i++;
		}

		if(i < j)
		{//交换
			int t = 0;
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
		
	}

	//当i和j相遇时候,将基准数据和相遇点的数据交换
	a[left] = a[i];
	a[i] = temp;

	//递归排列相遇点左边和右边的数据
	quicksort(a, left, i-1);
	quicksort(a, i+1, right);
}

样例数据
10
6 1 2 7 9 3 4 5 10 8
输出截图
c语言 快速排序_第1张图片




你可能感兴趣的:(c语言学习,快速排序,c语言,算法)