选择排序法

来源:互联网 发布:2017比较污的网络词语 编辑:程序博客网 时间:2024/04/30 02:49

 

//file 选择排序.cpp


//选择排序法的基本思想:
// 假设有n个数据放在数组a中,现要把这n个数从小到大排序。
// 首先,在a[0]到a[n-1]的范围内,选出值小元素与a[0]交换;
// 然后在a[1]到a[n-1]的范围内再选出值最小的元素与a[1]交换;
// 依次进行下去,进行n-1次选择后就可完成排序。

#include"iostream.h"

void xuanze_sort(int a[],int len)
{
 cout<<"/n/n正在选择排序:/n";

 for(int i=0;i<len-1;i++){ //最好和最坏情况下都要进行len-1次选择
 
  int k=i;      //准备选择第i个位置的元素,k初始为i

  for(int j=i+1;j<len;j++)
   if(a[k]>a[j])      
   
    k=j;  //k指示当前最小值元素的位置,
             //for结束后,k指示从a[i]到a[len-1]最小元素的下标
 
  if(k!=i){    //需要交换a[i]和a[k];也许k==i,意思为:原来的a[i]
   int temp=a[i];  //就是a[i]到a[len-1]间的最小值,k没有被修改,
                  //保持其初始化值i
   a[i]=a[k];
   a[k]=temp;
   }

  //输出经本次选择后的排序结果,用“|”号作为排好序元素和未排好序元素的分隔号

  for(int m=0;m<len;m++){
   if(m==i)
    cout<<a[m]<<"| ";
   else
    cout<<a[m]<<" ";
   }

  cout<<endl;

  }//end of for

 
}

void main(void)
{
 int b[]={9,8,-17,6,5,-4,3,2,1,0};
 int lenofb=sizeof(b)/sizeof(int);
 
 cout<<"before sort:/n";

 for(int i=0;i<lenofb;i++)
  cout<<b[i]<<" ";

 xuanze_sort(b,lenofb);
 
 cout<<"/nafter sort:/n";
 for(i=0;i<lenofb;i++)
  cout<<b[i]<<" ";

 cout<<endl;

}

 

 

 

//file 选择排序的变形1.cpp


//选择排序法的基本思想:
// 假设有n个数据放在数组a中,现要把这n个数从小到大排序。
// 首先,在a[0]到a[n-1]的范围内,选出值小元素与a[0]交换;
// 然后在a[1]到a[n-1]的范围内再选出值最小的元素与a[1]交换;
// 依次进行下去,进行n-1次选择后就可完成排序。

#include"iostream.h"
 
void main(void)
{
 int b[]={9,8,-17,6,5,-4,3,2,1,0};
 int len=sizeof(b)/sizeof(int);
 
 cout<<"before sort:/n";

 for(int i=0;i<len;i++)
  cout<<b[i]<<" ";

 cout<<"/n/n正在选择排序:/n";

 for(i=0;i<len-1;i++){ //最好和最坏情况下都要进行len-1次选择
 
  int k=i;      //准备选择第i个位置的元素,k初始为i

  for(int j=i+1;j<len;j++)
   if(b[k]>b[j])      
   
    k=j;  //k指示当前最小值元素的位置,
             //for结束后,k指示从a[i]到a[len-1]最小元素的下标
 
  if(k!=i){    //需要交换a[i]和a[k];也许k==i,意思为:原来的a[i]
   int temp=b[i];  //就是a[i]到a[len-1]间的最小值,k没有被修改,
                  //保持其初始化值i
   b[i]=b[k];
   b[k]=temp;
   }

  //输出经本次选择后的排序结果,用“|”号作为排好序元素和未排好序元素的分隔号

  for(int m=0;m<len;m++){
   if(m==i)
    cout<<b[m]<<"| ";
   else
    cout<<b[m]<<" ";
   }

  cout<<endl;

  }//end of outer for
 
 cout<<"/nafter sort:/n";

 for(i=0;i<len;i++)
  cout<<b[i]<<" ";

 cout<<endl;

}

 

 

 

 

 

//file 选择排序的变形2.cpp


//选择排序法的基本思想:
// 假设有n个数据放在数组a中,现要把这n个数从小到大排序。
// 首先,在a[0]到a[n-1]的范围内,选出值小元素与a[0]交换;
// 然后在a[1]到a[n-1]的范围内再选出值最小的元素与a[1]交换;
// 依次进行下去,进行n-1次选择后就可完成排序。

#include"iostream.h"
 
void main(void)
{
 int b[]={9,8,-17,6,5,-4,3,2,1,0};
 int len=sizeof(b)/sizeof(int);
 
 cout<<"before sort:/n";

 for(int i=0;i<len;i++)
  cout<<b[i]<<" ";

 cout<<"/n/n正在选择排序:/n";

 for(i=0;i<len-1;i++){ //最好和最坏情况下都要进行len-1次选择
 
   for(int j=i+1;j<len;j++)
    if(b[i]>b[j]){      
    int k=b[i];b[i]=b[j];b[j]=k;
    }
 
  
  //输出经本次选择后的排序结果,用“|”号作为排好序元素和未排好序元素的分隔号

  for(int m=0;m<len;m++){
   if(m==i)
    cout<<b[m]<<"| ";
   else
    cout<<b[m]<<" ";
   }

  cout<<endl;

  }//end of outer for
 
 cout<<"/nafter sort:/n";

 for(i=0;i<len;i++)
  cout<<b[i]<<" ";

 cout<<endl;

}

原创粉丝点击