排序代码示例

冒泡排序

#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

 

posted @ 2024-04-20 14:42  王ys  阅读(16)  评论(0编辑  收藏  举报