• 选择,冒泡和插入排序


    #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;
     } 
    

      

  • 相关阅读:
    Gantt/BTS 生产计划电子看板甘特图
    C# DotNetty TCP对接 松下扣料机
    Vue 和 Zebra 打印机连接直接打印条码
    JavaFx 通信ITC数字广播 SAPI 使用NeoSpeech Liang包生成语音
    Docker RabbitMQ 镜像集群
    游戏匹配实现
    Metro 界面设计案例
    JavaFX 集成 Sqlite 和 Hibernate 开发爬虫应用
    Discuz论坛 自动加好友留言程序
    JavaFX Metro UI 和 开发库
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/9063659.html
Copyright © 2020-2023  润新知