如果你已经熟悉了上一节冒泡排序代码 +
讲解,那么这一节对你来说很容易,因为选择排序像是冒牌排序的优化版本,在第二次循环中,它减少了每次比较满足条件后,两个值的交换过程。它直接用一个值存储当前最小值在数组中的下标,让此值作标准值跟待比较的值比较。不多说了,这个看代码更直观。相对于冒泡排序,步骤更少一点,也不需要来回的赋值交换,因此是优化版本的冒泡排序。
#include <iostream> #include <string> #include <stdlib.h> using namespace std; int data[10] = {0, 2, 1, 4, 3, 6, 5, 8, 7, 9}; void swap(int temp_i, int temp_j) { int temp_int = 0; temp_int = data[temp_i]; data[temp_i] = data[temp_j]; data[temp_j] = temp_int; if(temp_j == 9) { cout << "swap : " << temp_j << " : " << data[temp_j] << " : " << data[0] << endl; } } void select(int* data) //int data[] { for(int i = 0; i < 10; i++) //左->右 大->小 { int max_index = i; for(int j = i; j < 10; j++) { if(data[max_index] < data[j]) { max_index = j; } } if(i == 0) { cout << "第一个最大9: " << max_index << " : " << data[max_index] << endl; } swap(i, max_index); } } int main(void) { for(int i = 0; i < 10; i++) { cout << i << " : " << data[i] << endl; } select(data); for(int i = 0; i < 10; i++) { cout << i << " : " << data[i] << endl; } return 0; }