排序算法小结(插入排序、选择排序、交换排序与快速排序)

学习了插入排序、选择排序、交换排序与快速排序后,对这几种排序方法做个小结。

参考书籍:

  1. 《C++大学教程第七版》P.J.Deitel
  2. 《C++语言程序设计》(第4版)郑莉

1、插入排序

思想:

每一步将一个待排元素按其关键字的大小插入到已排序序列的适当位置,直到待排序元素插入为止。

时间复杂度:

O(n^{2}

代码:

#include
using namespace std;//插入排序,按升序排列 
template
void insertionSort(T a[],int n){
	for(int i=1;i0&&a[j-1]>temp){//寻找插入的位置 
			a[j]=a[j-1];
			j--;
		}
		a[j]=temp;
	}
}
int main(){
	const int size=10;
	int a[size]={43,6,3,13,23,30,20,24,35,16};
	insertionSort(a,size);
	cout<<"After insert sort:";
	for(int i=0;i

 

2、选择排序

思想:

每次从待排序序列中选择一个关键字最小的元素(如果按升序排列),顺序排在已排序序列的最后,直到全部排完。

时间复杂度:

O(n^{2}

代码:

#include
using namespace std;//选择排序,按升序排列 
template
void selectionSort(T a[],int n){
	for(int i=0;i

 

3、交换排序

思想:

两两比较待排序序列中的元素,并交换不满足顺序要求的各对元素,直到全部满足顺序要求为止。最简单的交换排序方法是冒泡排序。

时间复杂度:

O(n^{2}

代码:

#include
using namespace std;//冒泡排序,按升序排列 
template
void bubbleSort(T a[],int n){
	bool isSwap=true;
	for(int i=0;ia[j+1]){
	    		T temp=a[j];
	    		a[j]=a[j+1];
	    		a[j+1]=temp;
	    		isSwap=true;
			}//若isSwap=false,说明整个数组已经有序 
		}
	}
}
int main(){
	const int size=10;
	int a[size]={43,6,3,13,23,30,20,24,35,16};
	bubbleSort(a,size);
	cout<<"After bubble sort:";
	for(int i=0;i
 

 

4、快速排序

思想:

(a)分割:取没有排序序列的第一个元素并确定它的最终位置,使得序列中所有在它左边的值都小于它,在它右边的值都大于它。现在有一个在正确排序位置的元素和两个未排序的子序列。

(b)递归:在每个未排序的子序列中实现步骤(a)。如果一个待排序子序列只有一个元素组成,那么该元素就在它的最终位置上。

如何决定每个待排序序列第一个元素x最后所在的位置。如果最后要按升序排列,从序列的最右边开始,拿每个元素和x进行比较,直到找到一个比x小的元素,然后将这个元素与x交换位置。接着从序列的最左边开始,拿每个元素和x进行比较,直到找到一个比x大的元素,然后将这个元素与x交换位置。以此类推,直到x左边的元素都比x小,x右边的元素都比x大。

时间复杂度:

O(nlogn)

代码:

#include
using namespace std;//快速排序,按升序排列
template
void myswap(T &x,T &y){
	T temp=x;
	x=y;
	y=temp;
} 
template
void quickSort(T a[],int begin,int end){
	 int size=end-begin+1;
	 if(size<=0){
	 	return;
	 }
	 else{
	 	bool isSwap=true;
	 	int index=begin;
	 	while(isSwap){//如果a[begin]不在正确的位置上 
	 		isSwap=false;
	 		for(int i=end;i>index;i--){
	 			if(a[i]a[index]){
			 		myswap(a[i],a[index]);
			 		isSwap=true;
			 		index=i;
			 		break;
				 }
			 }
		 }
		 quickSort(a,begin,index-1);
		 quickSort(a,index+1,end);
	 }
}
int main(){
	const int size=10;
	int a[size]={43,6,3,13,23,30,20,24,35,16};
	quickSort(a,0,size-1);
	cout<<"After quick sort:";
	for(int i=0;i

 

你可能感兴趣的:(算法,简单编程,c++,算法,快速排序,排序算法)