2、选择排序

2、选择排序

选择排序(升序)的思想:总是从待排数组中选择最小的数

#include <bits/stdc++.h>
using namespace std;
void select_sort(int* a, int len);
void print(int* a, int len, bool isBefore= true);
int main(){
	int arr[10] = {1, 2, 66, 33, 88, 100, 18, 78, 12, 321};
	print(arr, 10);
	cout << "选择排序:" << endl;
	select_sort(arr, 10);
	print(arr, 10, false); 
	return 0;
}
 void print(int* a, int len, bool isBefore){
 	if(isBefore)
 		cout << "before sort:";
 	else
 		cout << "after sort:";
 		
 	for(int i = 0; i< len; i++){
 		cout << a[i] << " ";
	 }
 	cout << endl;
 }
void select_sort(int* a, int len){
	//从待排数组(0-len-1)中选择最小的,放到第一个元素处。
	//从待排数组(1-len-1)中选择最小的,放到第一个元素处。
	int temp;
	int minIdx; 
	for(int i = 0; i < len-1;i++){//多少论 
		temp = a[i];//先保存一下 
		minIdx = i;
		for(int j = i; j < len; j++){
			minIdx = (a[j] < a[minIdx])?j:minIdx;
		}
		a[i] = a[minIdx];
		a[minIdx] = temp;
	} 
}

思路分析(升序):

第一轮结束:1,2,66,33,88,100,18,78,12,321

第二轮结束:1,2,66,33,88,100,18,78,12,321

第三轮结束:1,2,12,33,88,100,18,78,66,321

第四轮结束:1,2,12,18,88,100,33,78,66,321

第五轮结束:1,2,12,18,33,100,88,78,66,321

第六轮结束:1,2,12,18,33,66,88,78,100,321

第七轮结束:1,2,12,18,33,66,78,88,100,321

此时已经全部排序完毕。

上一篇:实验一软件开发文档与工具的安装与使用


下一篇:逆向初级-硬编码(六)