flag冒泡排序,
代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int Sort(int A[],int n) //flag标记是否存在 顺序相反的相邻元素
{
int sum=0;
bool flag=1; //存在顺序相反的相邻元素
for(int i=0;flag;i++)
{
flag=0;
for(int j=n-1;j>=i+1;j--) //j>=i+1因为要和A[i]位置的元素比较
{
if( A[j]<A[j-1] )
{
swap( A[j] , A[j-1] );
flag=1;
sum++;
}
}
}
return sum;
}
int main()
{
int n,sw,A[105];
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&A[i]);
sw=Sort( A,n ); //返回的值sum 付给sw
for(int i=0;i<n;i++)
printf("%d%c",A[i],i==n-1?'\n':' ');
cout<<sw;
return 0;
}
/*
输入:
5
5 3 2 4 1
输出:
1 2 3 4 5
8
*/
选择排序:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
int Sort(int A[],int n)
{
int sum=0;
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
if( A[i]>A[j] )
{
swap( A[i] , A[j] );
sum++;
}
}
return sum;
}
int main()
{
int n,sw,A[105];
cin>>n;
for(int i=0;i<n;i++)
cin>>A[i];
sw = Sort( A , n );
for(int i=0;i<n;i++)
printf("%d%c",A[i],i==n-1?'\n':' ');
cout<<sw;
return 0;
}
之前用的冒泡排序:
int temp;
for(int i=0; i<n-1; i++){
for(int j=0; j<n-1-i; j++) {
if(a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}