交换排序交换排序分为快速排序和冒泡排序,就是根据序列中两个值的比较结果来对换这两个数在序列中的位置,特点就是较大值向尾部移动,较小值向前部移动。
冒泡排序:基本思路:每次比较将最大的值放在最后面,然后一共比较size-1趟,然后每次在比较size-i次。
void BubbleSort(int array[], int size)
{
for (int i = 1; i < size; i++){
int flag = 1;//优化算法
for (int j = 0; j < size - i; j++){
if (array[j]>array[j + 1]){
Swap(&array[j], &array[j + 1]);
flag = 0;
}
}
if (flag == 1){
break;
}
}
}
冒泡排序的特点总结:时间复杂度O(n*n),空间复杂度O(1),是一个稳定的排序。
快速排序(非递归):使用c++编写的
#include <stack>
void __QuickSortNor(int array[], int left, int right) {
std::stack<int> s;
s.push(right);
s.push(left);
int _left;
int _right;
while (!s.empty()) {
_left = s.top(); s.pop();
_right = s.top(); s.pop();
if (_left >= _right) {
continue;
}
int pivot_index = PickMid(array, left, right);
Swap(array + pivot_index, array + right);
int d = Partition_2(array, _left, _right);
// d + 1, right
s.push(_right);
s.push(d + 1);
// _left, d - 1
s.push(d - 1);
s.push(_left);
}
}