/*优化后的选择排序,比较次数不变的前提下减少交换次数*/ void selectsort(int arr[], int n) { int index, i, j; for (i = 0; i < n - 1; i++) { index = i; for (j = i + 1; j < n; j++) { if(arr[index] > arr[j])//找到比参照值小的元素的下标 { index = j;//将下标赋值给索引 } } if(index != i)//只有当索引不等于参照值下标时才交换 { arr[i] ^= arr[index]; arr[index] ^= arr[i]; arr[i] ^= arr[index]; } } } /*优化后的冒泡排序*/ void popsort(int arr[], int n) { int i, j, flag; for (i = 0; i < n - 1; i++) { flag = 0; for (j = 0; j < n - i - 1; j++) { if(arr[j] > arr[j + 1]) { arr[j] ^= arr[j + 1]; arr[j + 1] ^= arr[j]; arr[j] ^= arr[j + 1]; flag = 1; } } if(flag = 0) break; } }