当前位置:网站首页>C语言实现八种排序(2)

C语言实现八种排序(2)

2022-06-11 21:36:00 爱学代码的学生

2. 交换排序

 

2.1 冒泡排序

什么是冒泡排序?

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

代码实现如下:

void BubbleSort(int *a,int length){
	int i,j;
	int flag=1; //判断是否进行循环
	for(i=0;i<length-1&&flag==1;i++){
		for(j=0;j<length-1-i;j++){
			flag=0;
			if(a[j]>a[j+1]){
				flag=1;
				int temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}
}

但由于冒泡排序的时间复杂度过高,所有引申出了一种新型的排序 -- 快速排序(QuickSort)

这个名字就能彰显出其速率之快.

那这种排序是如何实现的?

代码如下:

//快速排序 
int Partition(int*a,int left,int right){
	int temp=a[left];//left下标作为基准数
	while(left<right){
		while(left<right&&a[right]>temp){
			right--;
		}
		if(left<right){
			a[left]=a[right];
		}
		while(left<right&&a[left]<temp){
			left++;
		}
		if(left<right){
			a[right]=a[left];
		}
	} 
	a[right]=temp;
	return right;
}
void QuickSort(int*a,int left,int right){
	if(left<right){
		int pivot=Partition(a,left,right);
		QuickSort(a,left,pivot-1);
		QuickSort(a,pivot+1,right);
	}
}

我们首先选择一个作为基准数,然后遍历整个数组(除了基准数),将小于基准数的放在它的左边,大于基准数的放在它的右边。

然后将基准数的左边和右边右看成一个数组,重复上述操作,直到每个数组只剩一个元素。


让我再水一期

原网站

版权声明
本文为[爱学代码的学生]所创,转载请带上原文链接,感谢
https://blog.csdn.net/rinki123456/article/details/124145946