1.冒泡排序
2.插入排序
3.选择排序
4.归并排序
5.希尔排序
6.快速排序
7.堆排序
…
快速排序
调用自带sort函数实现快速排序:
#include <algorithm> //头文件 算法
//演示
#include <bits/stdc++.h>
using namespace std;
bool cmp(const int &a, const int &b){
return a > b;
}
int main(){
int a[15];
for(int i = 0; i < 10; ++i)
a[i] = rand()%20; //随机生成10个20以内的整数
sort(a, a+10); //升序
for(int i = 0; i < 10; ++i)
cout << a[i] << " ";
cout << endl;
sort(a, a+10, cmp); //降序
for(int i = 0; i < 10; ++i)
cout << a[i] << " ";
return 0;
}
冒泡排序
逐次将相邻两数比较,如果前数比后数大(小)就交换。一轮交换后最后一个数就是最大(小)的,再重复对剩余项排序
void sort1(int num[], int n){ //冒泡排序
int ns = n;
bool yes = true;
while(ns){
for(int i = 1; i < ns; ++i)
if(num[i] < num[i-1]){
swap(num[i], num[i-1]) ;
yes = false;
}
if(yes)
break; //优化
yes = true;
--ns;
}
}
插入排序
直接插入排序的原理就是从第一项开始作为有序部分,然后循环将当前项与前面所有有序项进行比较,插入到有序序列中,直到最后所有数据都是有序序列
void sort2(int num[], int n){ //插入排序
int pk, s, k,
j; //for
for(int i = 0; i < n; ++i){
pk = num[i];
k = 0;
while(num[k] < pk && k < i)
++k;
for(j = i-1; j >= k; --j)
num[j+1] = num[j];
num[k] = pk;
}
}
选择排序
将所有数打擂台式比较,一轮后取出最大(小)的放在前面,再将剩余数据重复打擂台
void sort3(int num[], int n){ //选择排序
for(int i = 1; i < n; ++i){
int k = i-1;
for(int j = i; j < n; ++j)
if(num[j] < num[k])
k=j;
if(k!=i-1){
int t = num[k];
num[k] = num[i-1];
num[i-1] = t;
}
}
}
去重
对于已排序的数组,相等的元素必定是相邻的。如果某元素不等于前一元素,则储存这个“唯一”的元素,反之则继续检查接下来的元素。最后得到一个没有重复元素的有序序列
int easy(int num[], int n){ //去重
int nums[10005]; nums[0] = num[0];
int a = 1;
for(int i = 1; i < n; ++i){
if(num[i] != num[i-1]){
nums[a] = num[i];
++a;
}
}
for(int i = 0; i < a; ++i){
num[i] = nums[i];
}
return a; //去重后元素的个数
}
我特别钟爱冒泡排序,只不过sort函数这么方便,何乐而不为呢