学习c++(五)常用排序算法

常用排序算法

1、冒泡算法

循环n*n次 依次将最大的元素移动到最右端

// 冒泡算法
void sortBubble(int arr[], int len){
	for(int i=0;i<len-1;i++){
		for(int j=0; j<len-i-1; j++){
			if(arr[j+1]<arr[j]){
				int tmp = arr[j+1];
				arr[j+1] = arr[j];
				arr[j] = tmp;
			}
		}
	}
}
2、插入算法

将数组分为包含1个元素的有序数组和len-1个元素的无序数组,依次插入len-1次

// 插入算法
void sortInsert(int arr[], int len){
	int p,index;
	for (int i=1;i<len;i++){
		index = i-1 ;
		p = arr[i];
		while (index >= 0 && arr[index] > p){
			arr[index+1] = arr[index]; 
			index--;
		}
		arr[index+1] = p;
	}

}
3、选择算法

循环n*n次 找到最小元素的下标放到最左边

// 选择算法
void sortSelect(int arr[], int len){

	int index;
	for (int i=0;i<len-1;i++){
		index = i ;
		for (int j=i; j<len;j++){
			if(arr[index]>arr[j])
			{
				index = j;
			}
		}
		int tmp = arr[i];
		arr[i] = arr[index];
		arr[index] = tmp;
	}

}
4、快速算法

以一个元素为基准 大的放右边 小的放左边 依次递归

// 快速算法
int partition(int arr[], int low, int high){
	int mark = low;
	int p = arr[mark];
	while( high > low){

		if(p>arr[high]){
			low++;
			swap(arr,low,high);
			continue;
		}
		high--;
	}
	swap(arr,mark,low);
	return low;
}

void sortQuick(int arr[], int low, int high){
	if(low>=high){
		return;
	}
	int index = partition(arr,low,high);
	sortQuick(arr,low,index-1);
	sortQuick(arr,index+1,high);
}
posted @ 2024-07-07 02:26  大龙挂了,公主在哪  阅读(1)  评论(0编辑  收藏  举报