Bootstrap

C++实现数组元素排序

1. 以数组{4,2,8,0,5,7,1,3,9}为例,进行升序或者降序排序

降序排序:

#include<iostream>
using namespace std;


int main() {
    
	int arr[] = {4,2,8,0,5,7,1,3,9};
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
		for (int j = i + 1; j < sizeof(arr) / sizeof(arr[0]); j++) {
			if (arr[i] < arr[j]) {
				int temp = arr[i];
				arr[i] = arr[j];
				arr[j] = temp;
			}
		}
	}
	for (int k = 0; k < sizeof(arr) / sizeof(arr[0]); k++) {
		cout << arr[k] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}

升序排序:

#include<iostream>
using namespace std;


int main() {
    
	int arr[] = {4,2,8,0,5,7,1,3,9};
	//开始冒泡排序
	//总共的排序轮数为  元素个数-1
	for (int i = 0; i < sizeof(arr) / sizeof(arr[0])-1; i++) {
		//内层循环对比   次数 = 元素个数-当前轮数-1
		for (int j = 0; j < sizeof(arr) / sizeof(arr[0])-i-1; j++) {
			//如果第一个数字比第二个数字大,交换两个数字
			if (arr[j] > arr[j+1]) {
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	for (int k = 0; k < sizeof(arr) / sizeof(arr[0]); k++) {
		cout << arr[k] << " ";
	}
	cout << endl;

	system("pause");
	return 0;
}

2. 利用函数模板实现排序函数,实现对不同数据类型数组排序,使用选择排序,规则为从大到小

#include <iostream>
using namespace std;

//交换函数模板
template<typename T>
void mySwap(T& a, T& b) {
	int temp = a;
	a = b;
	b = temp;
}


//排序算法
template<typename T>
void mySort(T arr[],int len) {
	for (int i = 0; i < len; i++) {
		int max = i; //认定最大值下标
		for (int j = i + 1; j < len; j++) {
			//认定的最大值比遍历出的数值小,说明j下标元素才是真正最大值
			if (arr[max] < arr[j]) {
				max = j;//更新最大值下标
			}
		}
		if (max != i) {

			mySwap(arr[max], arr[i]);
		}
	}
}


//打印数组的模板
template<typename T>
void printArray(T arr[], int len) {
	for (int i = 0; i < len; i++) {
		cout << arr[i] << " ";
	}
	cout << endl;
}

void test01() {
	char charArr[] = "bcdefr";
	int num = sizeof(charArr) / sizeof(char);
	mySort(charArr, num);
	printArray(charArr, num);
}

void test02() {

	int intArr[] = { 3,6,1,9,7,4 };
	int num = sizeof(intArr) / sizeof(int);
	mySort(intArr, num);
	printArray(intArr, num);

}

int main() { 
	
	test01();
	test02();
	system("pause");
	return 0;
}

;