赞
踩
插入排序维基百科链接
插入排序说白了就是建一个已经排好序的数组,然后把原数组中的值一个一个的往新数组里边插;他的平均时间复杂度是o( n 2 n^2 n2),最好的情况是o(n);
C++代码实现
#include<iostream> #include<vector> #include<algorithm> using namespace std; vector<int> InsertionSort(vector<int> data) { int len = data.size(); vector<int> sortdata; sortdata.push_back(data[0]); for (int i = 1; i < len; i++) { sortdata.push_back(data[i]); for (int j = sortdata.size()-2; j >=0 ; j--) { if (sortdata[j+1] < sortdata[j]) { swap(sortdata[j], sortdata[j + 1]); } else continue; } } return sortdata; } int main() { vector<int> data; for (int i = 0; i < 10; i++) { data.push_back(rand() % 101); } cout << "未进行排序时的数组为:"; for (int i = 0; i < 10; i++) { cout << data[i] << ' '; } cout << '\n'; data=InsertionSort(data); cout << "排序结束后:"; for (int i = 0; i < data.size(); i++) { cout << data[i] << ' '; } return 0; }
希尔排序维基百科链接
希尔排序是插入排序的一种,核心思想就是先将整个待排数组进行分割(gap=length/2),先小范围的进行插入排序,然后再分割,,,,,,等到分割次数足够小( g a p n e w gap_{new} gapnew=( g a p b e f o r e / 2 gap_{before}/2 gapbefore/2))时直接进行一次插入排序
C++代码实现
#include<iostream> #include<vector> #include<algorithm> using namespace std; void ShellSort(vector<int>& data) { int len = data.size(); for (int gap = len / 2; gap > 0; gap /= 2) { //将待排数组进行切割 //cout << "gap is"<<gap<<'\n'; for (int i = 0; i < gap; i++)//开始进行插入排序 { for (int j = i + gap; j < len; j+=gap) { if (data[i] > data[j]) { swap(data[i], data[j]); } int k = j - gap; if (k >= 0 && data[k] > data[j]) swap(data[k], data[j]); } } } } int main() { vector<int> data; for (int i = 0; i < 10; i++) { data.push_back(rand() % 101); } cout << "原始数据为:"; for (int i = 0; i < 10; i++) { cout << data[i] << ' '; } cout << '\n'<<"希尔排序结果为:"; ShellSort(data); for (int i = 0; i < 10; i++) { cout << data[i] << ' '; } cout << '\n'; return 0; }
选择排序维基百科链接
选择排序的时间复杂度最坏是O( n 2 n^2 n2),最好是O( n 2 n^2 n2),平均是O( n 2 n^2 n2),选择排序是一种简单直观的排序算法。
算法思想如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
C++代码实现
#include<iostream>
#include<vector>
#
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。