排序代码示例
冒泡排序
#include<iostream>
using namespace std;
int main(){
int m[]={6,8,44,7,9,34,64,1};
for(int j=0;j<8;j++){
for(int i=j+1;i<8;i++){
if(m[j]>m[i]){
swap(m[j],m[i]);
}
}
}
for(int i=0;i<8;i++){
cout<<m[i]<<' ';
}
return 0;
}
/选择排序
基本思想:从数组的末排序区域选出一个最小的元素
把它与数组中的第一个元素交换位置
然后再从剩下的末排序区域选出一个最小的元素
把它与数组中的第二个元素交换位置
重复上述过程,直到数组中的所有元素按升序排列完成
#include<iostream>
using namespace std;
int main(){
int min=0;
int m[]={6,8,44,7,9,34,64,1};
for(int j=0;j<8;j++){
min=j;
for(int i=j+1;i<8;i++){
if(m[i]<m[min]){
min=i;
}
}
swap(m[j],m[min]);
}
for(int i=0;i<8;i++){
cout<<m[i]<<' ';
}
return 0;
}
/插入排序
基本思想:把一个要排序的数组划分为己排序和为排序的两部分
再从未排序部分逐个去除元素
把它和己排序元素进行比较
从右到左比较相邻的两个元素
如果右边的元素比左边的元素小
则交换两个元素,并向左继续比较和交换
否则就停止比较
按此处理为排序部分的所有元素
最终得到一个按升序排列的有序数组
这种算法也叫直接插入排序
#include<iostream>
using namespace std;
int main(){
int min=0;
int m[]={6,8,44,7,9,34,64,1};
for(int j=1;j<8;j++){
for(int i=j;i>0;i--){
if(m[i]<m[i-1]){
swap(m[i],m[i-1]);
}else{
break;
}
}
}
for(int i=0;i<8;i++){
cout<<m[i]<<' ';
}
return 0;
}
/希尔排序
对一维数组中的十个数组进行从小到大排序
基本思想:是直接插入排序的进阶版本,
将整个待排序元素序列分割成若干个子序列,
(由相隔某个“增量”的元素组成)分别进行直接插入排序,然后缩减增量再进行排序,
待整个序列中的元素基本有序(增量足够小)时,在对全体元素进行一次直接插入排序
#include<iostream>
#include<math.h>
using namespace std;
int main(){
string m="wangjiaxing";
for(double i=11;i>1;){
i=round(i/2);
for(int j=0;j+int(i)<11;j++){
if(m[j]>m[j+int(i)]){
swap(m[j],m[j+int(i)]);
}
}
}
cout<<m;
return 0;
}
/快速排序
#include<iostream>
using namespace std;
int n[]={6,3,5,8,9,10,7,34,89,2};
//将第一个数据作为基准数,根据基准数将数据分为两部分,大的在基准数右边,小的在基准数左边
//找准基准数位置后,进行左递归右递归重复上述操作
void ks(int n[10],int i,int j){
if(i<j){
int l=i,r=j;
int m=n[i];
while(l!=r){
while(n[r]>=m&&l!=r){
r--;
}
while(n[l]<=m&&l!=r){
l++;
}
if(l<r){
swap(n[l],n[r]);
}
}
swap(n[i],n[l]);
ks(n,i,l-1);
ks(n,l+1,j);
}
}
int main(){
ks(n,0,9);
for(int i=0;i<10;i++){
cout<<n[i]<<" ";
}
return 0;
}
/桶排序
#include<iostream>
using namespace std;
int main(){
int n,ans;
//cin>>n;
int t[100]={0};
for(int i=0;i<10;i++){
cin>>ans;
t[ans]++;
}
for(int i=10;i>0;i--){
if(t[i]!=0){
while(t[i]>0){
cout<<i<<" ";
t[i]--;
}
}
}
}
end

浙公网安备 33010602011771号