C++ 三種常見排序法,冒泡排序,選擇排序,快速排序

C++ 三種常見排序法

冒泡排序,選擇排序,快速排序

#include<iostream>
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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章