排序算法总结

排序算法总结

标签(空格分隔): 排序算法


1、选择排序

typedef int DATATYPE

void swap(DATATYPE* a, DATATYPE* b) {
	DATATYPE temp;
	temp = *b;
	*b = *a;
	*a = temp;
}

//选择排序
void selectSorted(DATATYPE a[], int length)
{
	assert(a != NULL);
	int max;
	for (int i = 0; i < length - 1; i++) {
		max = 0;
		for (int j = 1; j < length - 1 - i; j++) {
			if (a[max] < a[j]) {
				max = j;
			}
		}
		if (max != length - 1 - i) {
			swap(&a[max], &a[length - 1 - i]);
		}
	}

}

2、冒泡排序

typedef int DATATYPE

void swap(DATATYPE* a, DATATYPE* b) {
	DATATYPE temp;
	temp = *b;
	*b = *a;
	*a = temp;
}
//冒泡排序
void bubbleSorted(DATATYPE a[], int len) {
	assert(a != NULL);
	bool sorted = true;
	for (int i = 0; i < len - 1; i++) {
		sorted = true;
		for (int j = 0; j < len - 1 - i; j++) {
			if (a[j] > a[j + 1]) {
				swap(&a[j], &a[j + 1]);
				sorted = false;
			}
		}
		if (sorted) {
			break;
		}
	}

}

3、插入排序

typedef int DATATYPE

//插入排序
void insertSorted(DATATYPE a[], int len)
{
	assert(a != NULL);
	int preIndex, curData;
	for (int i = 1; i < len; i++)
	{
		preIndex = i - 1;
		curData = a[i];
		while (preIndex >= 0 && a[preIndex] > curData) {
			a[preIndex + 1] = a[preIndex];
			preIndex--;
		}
		a[preIndex + 1] = curData;
	}
	
}

4、希尔排序

typedef int DATATYPE

//希尔排序	缩小增量的插入排序
void shellSorted(DATATYPE a[], int len)
{
	int gap = len / 2;
	while (gap > 0) {
		for (int i = gap; i < len; i++) {
			int curData = a[i];
			int preIndex;
			for (preIndex = i - gap; preIndex >= 0 && a[preIndex] > curData;) {
				a[preIndex + gap] = a[preIndex];
				preIndex = preIndex - gap;
			}
			a[preIndex + gap] = curData;
		}
		gap /= 2;
	}
}

5、快速排序

typedef int DATATYPE
//插入排序 去基准数,将大于等于它的数放在右边,小于他的数放左边,返回插入位置的下标
int partiton(DATATYPE a[], int low, int high) {
	assert(a != NULL );
	int i = low;
	int j = high;
	int base = a[low];
	if (low < high) {
		while (i < j) {
			while (i < j && a[j] >= base) j--;
			if (i < j)
			{
				a[i++] = a[j];
			}
			while (i < j && a[i] < base) i++;
			if (i < j) {
				a[j--] = a[i];
			}
		}
		a[i] = base;
	}
	return i;
}

//分治思想 递归排序
void quickSorted(DATATYPE a[], int low, int high)
{
	assert(a != NULL);
	if (low < high) {
		int index = partiton(a, low, high);
		quickSorted(a, low, index - 1);
		quickSorted(a, index + 1, high);
	}
}

6、堆排序

参考:这是去往 堆排序算法 的链接。

上一篇:⭐算法入门⭐《堆》简单01 —— LeetCode 剑指 Offer 40. 最小的k个数


下一篇:ThinkPHP 5.x.x RCE 总结