首页 > 编程语言 > 详细

交换排序

时间:2019-03-02 22:22:18      阅读:166      评论:0      收藏:0      [点我收藏+]

技术分享图片

1.冒泡排序

从后往前,比较两个数的大小,交换位置

技术分享图片
//冒泡排序
#include<iostream>
using namespace std;
void bubble_sort(int a[],int start,int end){
    int i,j,tmp;
    for(i=start;i<=end-2;i++){
        for(j=end-1;j>=i+1;j--)
        if(a[j]<a[j-1]) {
            tmp=a[j];
            a[j]=a[j-1];
            a[j-1]=tmp;
        } 
    }
}
int main()
{
    int n;
    cin>>n;
    int a[n];
    for(int i=0;i<n;i++)  cin>>a[i];
    bubble_sort(a,0,n);
    for(int i=0;i<n;i++) cout<<a[i]<<" ";
} 
View Code

2.快速排序

任意取一个元素,以这个元素为基准,将其他元素分到两边,可以由递归实现

技术分享图片
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 1000050
int a[N];//当数据过大时要放在函数外面防止栈溢出
int m;
void QuickSort(int low,int high){
int k;
int i;
k=a[low];
int left=low;
int right=high;
if(left>right)
return ;
while(left!=right){
while(a[right]<k&&left<right)
right--;
if(left<right){
a[left]=a[right];
left++;
}
while(a[left]>k&&left<right)
left++;
if(left<right){
a[right]=a[left];
right--;
}
}
a[left]=k;
if(m<=left+1) QuickSort(low,left-1);
else{
QuickSort(low,left-1);
QuickSort(left+1,high);
}
}
int main(){
int i;
int j;
int n;
while(scanf("%d%d",&n,&m)!=EOF){
for(i=0;i<n;i++)
scanf("%d",&a[i]);
QuickSort(0,n-1);
for(i=0;i<m;i++){
printf("%d",a[i]);
if(i!=m-1)
printf(" ");//注意最后没有空格
}
printf("\n");//每组数据输出一行
}
return 0;
}
View Code

 

交换排序

原文:https://www.cnblogs.com/helloworld2019/p/10462971.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!