// 假设列表是数组 #include<iostream> voidswap(int& a, int& b) { if (a == b) return; a = a ^ b; b = a ^ b; a = a ^ b; } voidprint_array(int* A, int n) { for (int i = 0; i < n; ++i) { std::cout<<A[i]<<" "; } std::cout<<std::endl; } voidselection_sort(int* A, int n) { for (int i = 0; i < (n - 1); ++i) { intmin_index(i); for (int j = i + 1; j < n; ++j) { if (A[j] < A[min_index]) {min_index = j;} } swap(A[i], A[min_index]); } } intmain() { int A[7] = {89, 45, 68, 90, 29, 34, 17}; selection_sort(A, 7); print_array(A, 7); system("Pause"); }
冒泡排序
问题描述
为一个数组排序。
算法描述
每次遍历比较表中的相邻元素,如果它们是逆序的话就交换它们的位置。重复n-1次后,列表即排好序。
分析
时间复杂度O(n2),空间复杂度O(1)
代码
1 2 3 4 5 6 7 8 9 10 11
// 假设列表是数组 voidbuble_sort(int* A, int n) { for (int i = n-1; i > 0; --i) { for (int j = 0; j < i; ++j) { if (A[j] > A[j+1]) {swap(A[j], A[j+1]);} } } }