C++ 排序算法小结

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函数这么方便,何乐而不为呢

发布了6 篇原创文章 · 获赞 5 · 访问量 779

猜你喜欢

转载自blog.csdn.net/weixin_45425652/article/details/102208852