看到一个写的很好的排序算法讲解,保留下来!!
1.选择排序法(以从小到大排序为例)
算法思想:
A.在未排序序列中找到最小元素,存放到排序序列的起始位置
B.从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾
C.以此类推,直到所有元素均排序完毕
选择排序法动图演示
代码:
#include <bits/stdc++.h>
using namespace std;
//选择排序
void PaiXu(int arr[200],int length){
int t;
for(int i=0;i<length-1;i++){
for(int j=i+1;j<length;j++){
if(arr[i]>arr[j]){
t=arr[i];
arr[i]=arr[j];
arr[j]=t;
}
}
}
}
void ShuChu()
{
int arr[200],length;
cin>>length; //输入数组长度
for(int i=0;i<length;i++){ //创建数组,输入值
cin>>arr[i];
}
PaiXu(arr,length); //调用方法PaiXu进行排序
for(int i=0;i<length;i++){ //输出排序后的数组
cout<<arr[i]<<" ";
}
}
int main(){
ShuChu();
return 0;
}
2.冒泡排序法(从小到大排序为例)
算法思想:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数,然后将该数固定
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
冒泡排序法动图演示
代码:
#include<bits/stdc++.h>
using namespace std;
//冒泡排序
void PaiXu(int arr[200],int length){
int t;
for(int i=0;i<length-1;i++){
for(int j=0;j<length-1-i;j++){
if(arr[j]>arr[j+1]){
t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
void ShuChu()
{
int arr[200],length;
cin>>length; //输入数组长度
for(int i=0;i<length;i++){ //创建数组,输入值
cin>>arr[i];
}
PaiXu(arr,length); //调用方法PaiXu进行排序
for(int i=0;i<length;i++){ //输出排序后的数组
cout<<arr[i]<<" ";
}
}
int main(){
ShuChu();
return 0;
}
代码是我自己简化后的代码,原文的代码更为简单直接(更好懂!),而且原文有c和c++两个版本,需要的可以查看:
原文链接:
https://blog.csdn.net/weixin_45824515/article/details/106249170