- 插入排序:
思想是假设key之前的序列是有序的,只要将key插入到正确的位置即可,即将序列的元素向后移动。
vector<int> v{ 3,1,5,0,8,4,7,9 };
for (decltype(v.size()) i = 1; i < v.size(); ++i) {
int j = i;
int key = v[i];
while (j > 0 && key < v[j - 1]) {
v[j] = v[j - 1];
--j;
}
v[j] = key;
}
- 冒泡排序:
思想是每一轮外层循环都将比较后最大的值放到当前起始搜索的位置。
for (int i = 0; i < size; ++i) { //size为序列长度
for (int j = i; j < size; ++j) {
if (a[i] < a[j]) {
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
- 壳排序:
思想还不理解???
void shellSort(int v[], int size) {
int gap, i, j, temp;
for (gap = n/2; gap > 0; gap /=2) {
for (i = gap; i < n; i++) {
for (j = i - gap; j >= 0 && v[j] > v[j+gap]; j-= gap) {
temp = v[j];
v[j] = v[j + gap];
v[j + gap] = temp;
}
}
}
return;
}
快速排序:
void swap(int v[], int i, int j) {
int temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
return;
}
void qsort(int v[], int left, int right) {
int i, last;
if (left >= right) {
return;
}
swap(v, left, (left + right) /2);
last = left;
for (i = left + 1; i <= right; i++) {
if (v[i] < v[left])
swap(v, ++last, i);
swap(v, left, last);
qsort(v, left, last - 1);
qsort(v, last + 1, right);
return;
}