这是选择排序。先用a[0]与a[1]比较,当a[0]<a[1]时并不交换,而用tmp记下来现在a[0]最小……这样一趟比较完后a[tmp]就是整个数组中最小的元素,把它与a[0]交换;第二趟,从a[1]开始重复前面的操作,那么最后a[1]就是剩下的n-1个元素中最小的……看a[0]、a[1]已经由小到大排好了,当做完n-1趟时不就把整个数组都排好了 int a[5] = {5,4,3,2,1}; int tmp; // 选择排序 for (int k = 0; k < 4; k++) { tmp = k; for (int i = k; i < 5; i++) { if (a < a[tmp]) { //记录最小数位置 tmp = i; } } //交换tmp与k位置 if (tmp != k) { a[tmp] = a[tmp] + a[k]; a[k] = a[tmp] - a[k]; a[tmp] = a[tmp] - a[k]; } }
选择排序总是会比冒泡排序效率高,因为选择排序每轮至多只交换1欢,但从算法角度考虑,时间复杂度并没有什么改进,因为都是O(n^2)算法具体应用看情况 看样本的多少
|