选择,冒泡和插入排序

#include<iostream>
using namespace std;
void swap(int &a ,int &b){
	int temp;
	temp = a ;
	a = b;
	b = temp;	
}
void bubblesort(int a[],int n)
{
	int i,j;
	int temp;
	for(i=n-1;i>=0;i--)
	{
		for(j=0;j<i;j++)
		{
			if(a[j]>a[j+1])
			{
				//交换 冒泡排序的思想,就是从前到后两个两个比较,每次把最大的交换在最后,一次遍历后,最后一位就是最大的有序数
			swap(a[j],a[j+1]);
			}
		}	
	}
	for(i=0;i<n;i++)
	  cout<<a[i]<<" ";
}
//选择排序(一一比较,选择出最大最小的数,类似于冒泡排序(减少了交换)) 
void selectsort(int a[],int n)
{
	int i,j,min;
	for(i=0;i<n;i++)
	{
		min = i;
		for(j=i+1;j<n;j++)
		{
			if(a[j]<a[min])
			{
				min = j;
			}
			
		}
		if(i!=min)
		{
			swap(a[i],a[min]);
		}
	}
	for(i=0;i<n;i++)
	  cout<<a[i]<<" ";
	
}
void insertsort(int a[],int n)
{
	//插入排序,类似于扑克牌,默认第一个数是有序的,插入新的数,放在排好序列的位置;
	int preindex,i,current;
	for(i=1;i<n;i++)//默认第一个数是有序的 
	{
		preindex = i-1;
		current = a[i];
		while(preindex>=0&&a[preindex]>current)
		{
			a[preindex+1] = a[preindex];
			preindex--;
			//preindex--;一直到-1的时候条件终止; preindex+1表示空的位置,需要插入的位置 
		}
		a[preindex+1] = current;
	} 
	for(i=0;i<n;i++)
	  cout<<a[i]<<" ";
}
void swapInt(int * a,int*b)
{
 int c=*a;
 *a=*b;
 *b=c;
}
void shell(int*data,int len)
{
 if(len<=1||data==NULL)
  return;
 for(int div=len/2;div>=1;div=div/2)//定增量div,并不断减小
 {  
  for(int i=0;i<=div;++i)//分组成div组
  {
   for(int j=i;j<len-div;j+=div)//对每组进行插入排序
    for(int k=j;k<len;k+=div)
     if(data[j]>data[k])
      swapInt(data+j,data+k);//交换两个数的值
  }
 }
 for(int i=0;i<len;i++)
	  cout<<data[i]<<" ";
}
int main(void)
{
	int a[10]={10,9,8,7,6,5,4,3,2,1};
	//bubblesort(a,10);
	//selectsort(a,10);
	//insertsort(a,10);
	shell(a,10);
	
	
	return 0;
 } 

  

原文地址:https://www.cnblogs.com/love-life-insist/p/9063659.html