赞
踩
题一:直接插入排序
#include<iostream> #include<vector> using namespace std; vector<int> InsertSort(vector<int> str){ int temp; //用于暂存待插入元素 int j; for(int i=1;i<str.size();i++){ //因为将第一个元素看作有序区,所以从第二个元素开始 temp=str[i]; j=i-1; //标记有序区的最后一个元素 while(temp<str[j]){ //倒着和有序区的元素进行比较,若待插入元素小于比较元素,则将有序区元素向后移动 str[j+1]=str[j]; //直至找到插入位置 j--; } str[j+1]=temp;//将待插入元素插入 } return str; } int main(){ /*插入排序:插入排序的序列分为两部分,有序区和无序区,每进行一趟,就将无序区里的一个元素插入有序区中 初始时,将第一个元素看为初始有序区,从第二个记录一次插入到有序序列中,直至将第n个记录插入 */ vector<int> str; int num; cin>>num; int temp; for(int i=0;i<num;i++){ cin>>temp; str.push_back(temp); //创建数组 } str=InsertSort(str); for(int i=0;i<str.size();i++){ cout<<str[i]<<" "; } return 0; }
题二:冒泡排序
#include<iostream> #include<vector> using namespace std; /* 冒泡排序:(实现从小到大排序) 进行一趟排序时,将相邻的两个元素进行比较,将比较小的数放在前面,比较大的数放在后面。直到数组最后一个元素 每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值 */ vector<int> BubbleSort(vector<int> str){ int i=0;//用来标记是第几趟排序 int visit=1; //用来标记每趟排序中是否有交换元素,若有元素交换,则visit=1;若无,则visit=0 while(visit!=0){ visit=0; //进入循环前将其置0 for(int j=1;j<=str.size()-i-1;j++){ //每趟遍历len-i-1个元素 if(str[j-1]>str[j]){ //交换相邻元素,小的在前,大的在后 int temp=str[j-1]; str[j-1]=str[j]; str[j]=temp; visit=1; //表示有元素交换 } } i++; } return str; } int main(){ vector<int> str; int num; cin>>num; int temp; for(int i=0;i<num;i++){ //构建数组 cin>>temp; str.push_back(temp); } str=BubbleSort(str); for(int i=0;i<str.size();i++){ cout<<str[i]<<" "; } return 0; }
题三:简单选择排序
#include<iostream> #include<vector> using namespace std; /* 简单选择排序: 将数据分为有序区和无序区,初始时,有序区为空 选择无序区的最小元素,加入有序区的末尾 */ vector<int> SelectSort(vector<int> str){ int min=0; //用来保存最小元素的下标 for(int i=0;i<str.size();i++){ min=i; for(int j=i+1;j<str.size();j++){ //寻找最小元素 if(str[j]<str[min]) min=j; } if(min!=i){ int temp=str[i]; str[i]=str[min]; str[min]=temp; } } return str; } int main(){ vector<int> str; int num; cin>>num; int temp; for(int i=0;i<num;i++){ //构建数组 cin>>temp; str.push_back(temp); } str=SelectSort(str); for(int i=0;i<str.size();i++){ cout<<str[i]<<" "; } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。