C++ 三种常见排序法,冒泡排序,选择排序,快速排序

C++ 三种常见排序法

冒泡排序,选择排序,快速排序

#include
using namespace std;

/* 
	打印数组中的所有元素
	第一个参数为要传的数组,第二个为被传数组的长度 
*/ 
void print(int arr[], int length){  
    for(int j = 0; j < length; j++){  
        cout<<arr[j] <<"  ";  
    }
    cout<<endl;
}

/* 
	交换数组中的两个元素的位置 
	第一个参数为要交换的数组,第二个为要调换值的下标1第三个为要调换的下标2 
*/ 
void swap(int array[], int a, int b){
	int s = array[a];
	array[a] = array[b];
	array[b] = s;
}

/*
	冒泡排序
	第一个参数为要传的数组,第二个为被传数组的长度 
*/ 
void bubbleSort(int array[], int length){
	for (int i = 0; i < length; i++){
		for (int j = i + 1; j < length; j ++ ){
			if (array[i] > array[j]){
				swap(array, i, j);
			}
		}
	}
}

/*
	选择排序
	第一个参数为要传的数组,第二个为被传数组的长度  
*/ 
void selectSort(int array[], int length){
	for (int i = 0; i < length; i++){
		int bufferIndex = i;
		for (int j = i + 1; j < length; j ++ ){
			if (array[j] < array[bufferIndex]) {
				bufferIndex = j;
			} 
		}
		swap(array,i,bufferIndex);
	} 
}

/*
	快速排序 
	第一个参数为要传的数组,第二个为要排序的起始位置,第三个为要排序的终止位置 
*/ 
void quickSort(int array[], int start, int end){
	if(end <= start){
		return;
	}
	int left = start;
	int right = end;
	int pivot = array[left];
	while (left < right){
		//计算最右边的最小值 
		while (left < right && array[right] >= pivot){
			right --;
		}
		//把最右边的最小值赋值给左边 
		array[left] = array[right];
		//计算最左边的最大值 
		while (left < right && array[left] <= pivot){
			left ++;
		}
		//把最左边的最大值赋值给右边 
		array[right] = array[left];
	}
	array[left] = pivot;
	quickSort(array, start, left - 1);//递归排序左半部分 
	quickSort(array, left + 1, end);//递归排序右半部分 
} 

int main(){
	// 冒泡排序法 
	int arr1[] = {4,5,2,3,1};
	print(arr1, 5);
	bubbleSort(arr1, 5);
	print(arr1,5);
	
	// 选择排序法 
	int arr2[] = {4,5,2,3,1};
	print(arr2, 5);
	selectSort(arr2, 5);
	print(arr2, 5);
	
	// 快速排序法 
	int arr3[] = {4,5,2,3,1};
	print(arr3, 5);
	//最大长度为下标长度 
	quickSort(arr3, 0, 4);
	print(arr3, 5);
	return 0;
}

你可能感兴趣的:(经验分享)