数据结构排序----直接选择排序

版权声明:[email protected] https://blog.csdn.net/qq_271334644/article/details/88343044

直接选择排序:

在元素集合array[i]---array[n-1]中选择关键码最大(小)的数据元素

若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换

在剩余的array[i]---array[n-2]集合中,重复上述步骤,直到集合剩余一个元素

直接选择排序
 时间复杂度
最好 | 平均 | 最差    O(n^2)        (不敏感)

 空间复杂度 O(1)
 稳定性:不稳定        { 7, 8, 3a, 5, 3b } 交换无法保证3a 还在 3b 前

程序实现

#include<stdio.h>
void Swap(int *a, int *b) {
	int t = *a; *a = *b; *b = t;
}
void SelectSort(int array[], int size) {
	//  for (i = 1; i < size; i++) {
	for (int i = 0; i < size; i++) {
		// [0, size - i)
		int m = 0;
		// for (j = 1 ...)
		for (int j = 0; j < size - i; j++) {
			if (array[j] > array[m]) {
				m = j;
			}
		}
		// m 就是最大数的下标了
		Swap(array + m, array + size - i - 1);
	}
}
int main() {
	int array[] = { 3, 9, 1, 4, 7, 8, 3, 5 };
	int size = sizeof(array) / sizeof(int);
	SelectSort(array, size);
	for (int i = 0; i < size; i++) {
		printf("%d ", array[i]);
	}
	printf("\n");
}

猜你喜欢

转载自blog.csdn.net/qq_271334644/article/details/88343044