C++实现直接插入排序、冒泡排序、简单选择排序


代码:

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;


//直接插入排序
void directedInsertSort(int A[], int n) {

	int i, j;
	for (i = 2; i <= n; ++i) {
		if (A[i] < A[i - 1]) {
			A[0] = A[i];
			for (j = i - 1; A[j] > A[0]; --j) {//边比较边移动元素
				A[j + 1] = A[j];
			}
			A[j + 1] = A[0];
		}
	}
}

//使用二分法查找的直接插入排序
void binaryInsertSort(int A[], int n) {
	int i, j, mid, low, high;
	for (i = 2; i <= n; ++i) {
		if (A[i] < A[i - 1]) {
			A[0] = A[i];
			low = 1;
			high = i - 1;
			while (low <= high) {
				mid = (low + high) / 2;
				if (A[mid] <= A[0]) {
					low = mid + 1;
				}
				else {
					high = mid - 1;
				}
			}
			for (j = i - 1; j>=low; --j) {
				
				A[j + 1] = A[j];
			}
			A[j + 1] = A[0];
		}
	}
}

//冒泡排序
void BubbleSort(int A[], int n) {
	int i, j, flag;
	for (i = 1; i < n; ++i) {//冒泡n-1次
		flag = 0;
		for (j = 1; j <= n - i; ++j) {//将值最大的元素逐步交换到数组尾部
			if (A[j] > A[j + 1]) {
				A[0] = A[j];
				A[j] = A[j + 1];
				A[j+1] = A[0];
				flag = 1;
			}
		}
		if (flag == 0) {
			break;
		}
	}
}

//简单选择排序
void DelectSort(int A[], int n) {
	int i, j, min;
	for (i = 1; i < n; ++i) {
		min = i;
		for (j = i; j <= n; ++j) {//找出j-n中最小元素的下标,用min记录;
			if (A[j] < A[min]) {
				min = j;
			}
		}
		if (min != i) {//如果A[i]是最小的话,就不用操作
			A[0] = A[min];//使用A[0]当交换元素位置的中间变量
			A[min] = A[i];
			A[i] = A[0];

		}
	}
}

//生成一个大小为n的随机数列,从A[1]开始存储
int* GreatArray(int n) {
	int *A;
	A = new int[n + 1];
	
	for (int i = 1; i <= n; ++i) {
		
		A[i] = rand()%100;
	}

	return A;

}

//打印数列的所有元素
void PrintArray(int A[],int n) {
	
	for (int i = 1; i <= n; ++i) {
		cout << A[i]<<" ";
	}
	cout << endl;
}


int main() {
	int n;
	cout << "请输入数组大小:";
	cin >> n;
	int* A;
	cout << endl;


	//直接插入排序,插入过程分为查找插入位置和移动插入位置后的所有元素,查找插入位置可以采用二分法查找;
	A = GreatArray(n);
	cout << "随机数组元素为:";
	PrintArray(A, n);
	cout << "直接插入排序后:";
	directedInsertSort(A, n);
	PrintArray(A, n);
	cout << endl;

	//冒泡排序
	A = GreatArray(n);
	cout << "随机数组元素为:";
	PrintArray(A, n);
	cout << "冒泡排序后    :";
	BubbleSort(A, n);
	PrintArray(A, n);
	cout << endl;

	//简单选择排序
	A = GreatArray(n);
	cout << "随机数组元素为:";
	PrintArray(A, n);
	cout << "简单选择排序后:";
	DelectSort(A, n);
	PrintArray(A, n);
	cout << endl;



}

运行效果:

请输入数组大小:10

随机数组元素为:41 67 34 0 69 24 78 58 62 64
直接插入排序后:0 24 34 41 58 62 64 67 69 78

随机数组元素为:5 45 81 27 61 91 95 42 27 36
冒泡排序后 :5 27 27 36 42 45 61 81 91 95

随机数组元素为:91 4 2 53 92 82 21 16 18 95
简单选择排序后:2 4 16 18 21 53 82 91 92 95


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值