对于给定的n个元素,从第一个元素开始,依次对相邻的两个元素进行比较,当前面的记录大于后面的元素,交换位置,进行一轮比较和移动后,n个元素中最大的元素位于第n位;然后对前n-1个元素进行第二轮比较……
#include<iostream>
using namespace std;
//void sort(int *arr,int n) //两个相邻的数相比较
//{
// int i,j;
// int temp;
// for(i=0;i<n;i++)
// {
// for(j=0;j<n-1;j++)
// {
// if(arr[j]>arr[j+1])
// {
// temp=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=temp;
// }
// }
// }
//}
//void sort1(int *arr,int n) //改进一
//{
// int i,j,temp;
// int flag=0;
// for(i=0;i<n;i++)
// {
// for(j=0;j<n-1;j++)
// {
// if(arr[j]>arr[j+1])
// {
// flag=1;
// temp=arr[j];
// arr[j]=arr[j+1];
// arr[j+1]=temp;
// }
// }
// if(flag==0)
// 如果循环一次后无位置调换,表明顺序已排好
// break;
// }
//}
void sort3(int *arr,int n) //改进二
{
int i,j,temp;
int k;
int flag=n;
for(i=0;i<flag;i++)
{
k=flag;
flag=0; //循环结束
for(j=0;j<k-1;j++)
{
if(arr[j]>arr[j+1])
{
flag=j;//标记已排好序的下标
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
int main()
{
int arr[]={5,3,2,8,10};
//sort(arr,5);
//sort1(arr,5);
sort3(arr,5);
for(int i=0;i<5;i++)
cout<<arr[i]<<endl;
system("pause");
return 0;
}
算法复杂度O(n²)