Java教程

浅谈各种排序算法

本文主要是介绍浅谈各种排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

插入排序

#include<iostream>
#include<vector>
using namespace std;

void insertSort(vector<int> &arr) {
	//插入sort 
	int key = 0;
	int j = 0; 
	for(int i = 1; i < arr.size(); i++) {
		key = arr.at(i);
		j = i - 1;
		while (j >=0 && key < arr.at(j))
		{
			arr.at(j + 1) = arr.at(j);	//向后移动
			j--;
		}
		arr.at(j+1) =key;
	}

}

int main() {
	vector<int> arr = { 12,15,9,20,6,31,24 };
	for (auto &val : arr) {
		cout << val << " ";
	}
	cout << "输出 arr 排序后:";

	insertSort(arr);
	for (auto &val : arr) {
		cout << val << " ";
	}
	cout << endl;
	return 0;
}

希尔排序

#include<iostream>
#include<vector>
using namespace std;

void  shellSort(vector<int> &arr) {
	//希尔排序 分类间隔
	int length = arr.size();
	for (int k=length/2 ; k>0;  k/=2)
	{
		for (int i = k; i < length;i++) {
			int temp = arr.at(i);
			int j = i - k;
			for(;j>=0;j-=k)		//	>=0
			{
				if (temp < arr.at(j)) arr.at(j + k) = arr.at(j);
				else break;
			}
			arr.at(j + k) = temp;
		}
	}
}

void shellSort2(vector<int> &arr) {
	//使用交换法 进行 shell 排序
	int len = arr.size();
	for (int k = len / 2; k > 0;k/=2) {		//这里的k 最小是1 即最后每一数都进行插入排序
		for (int i = k; i < len; i++) {
			for (int j = i-k; j >= 0; j -= k) {			//脚标可以为0 
				if (arr.at(j) > arr.at(j+k)) swap(arr.at(j + k), arr.at(j));
				else break;
			}
		}
	
	}
}

int main() {
	vector<int> arr = { 12,15,9,20,6,31,24 };
	cout << "希尔排序后" << "" << endl;
	shellSort2(arr);
	for (auto &val :arr) {
		cout << val << " ";
	}

	return 0;
}

选择排序

#include<iostream>
#include<vector>
using namespace std;
void selectSort(vector<int> &arr) {
	//选择排序
	for (int i = 0; i < arr.size();i++) {
		int minIndex = i;
		int minValue = arr[i];
		for (int j = i + 1; j < arr.size(); j++) {
			if(minValue >arr[j]) {
				minIndex = j;
				minValue = arr[j];
			}
		}
		swap(arr[minIndex],arr[i]);
	}
}

int main() {
	vector<int> arr = {12,15,9,20,6,31,24};
	cout << "选择排序后的arr :"<<endl;
	selectSort(arr);
	for (auto &val : arr) {
		cout << val<<" ";
	}
	return 0;
}
这篇关于浅谈各种排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!