zoukankan      html  css  js  c++  java
  • 常见排序算法及实现

    关于冒泡最优情况说明一下,O(n)是指在使用标志情况下,否则仍是O(n)。

    冒泡排序:

    //本人习惯先把最大的选出来,放到右边
    void maopao(int arr[],int n)
    {
    	int i,j,tmp;//tmp提前写上,或者及时补上!
    	for (i=n-1;i>=0;i--)//不能少写等号!
    	for(j=0;j<i;j++)
    	{
    		if(arr[j]>arr[j+1])//不比较等于情况!否则就不稳定了!
    		{
    			tmp=arr[j+1];
    			arr[j+1]=arr[j];
    			arr[j]=tmp;
    		}
    	}
    	return;
    }

    使用标志的冒泡排序,最好可达到O(n):

    void bubble_sort(int d[], int size)
    {
    	//假定两两交换发生在数组最后的两个位置
    	int exchange = size - 1;
     	while(exchange)
    	{                
                    int bound = exchange;//记录下发生数据交换的位置
                     exchange = 0; //假定本趟比较没有数据交换
                     for(int i = 0; i < bound; i++)
                    {
                            if (d[i] > d[i + 1])//交换
                            {                       
                                    int t = d[i];
                                    d[i] = d[i + 1];
                                    d[i + 1] = t;
                                     exchange = i + 1;
                            }
                    }
            }
    }
    

    快速排序:

    void fast(int arr[],int left,int right)
    {
    	int i,j,k;
    
    	if(left<right){
    	i=left+1;j=right;
    
    	while(i<j){
    		while(arr[i]<arr[left]&&i<right)i++;//
    		while(arr[j]>arr[left]&&j>left)j--;//
    		if(i<j) swap(&arr[i],&arr[j]);//大部分时候必要,最后那次在循环外完成
    	};
    
    	swap(&arr[j],&arr[left]);//
    	fast(arr,left,j-1);
    	fast(arr,j+1,right);
    	}	
    	return;
    }
    

    插入排序:

    void insert(int arr[],int n)
    {
    	int i=0,j=0,k=0,tmp;
    	for(i=1;i<=n-1;i++)
    	{	
    		for(j=i-1;j>=0;j--)//忘记写=0了,结果gdb半天才发现!
    		{
    			if(arr[j]>arr[j+1])//
    				swap(&arr[j],&arr[j+1]);
    			else
    				break;
    		}
    
    	}
    	return;
    }
    

    选择排序:

    void select1(int arr[],int n)
    {
    	int i=0,c=0,j=0;
    	int place,min;//
    	for(i=0;i<n;i++)
    	{	min=arr[i];;//切莫忘记每次初始化,否则各种奇怪错误!仅在外面初始化为0还不够!	
    		for(j=i+1;j<=n;j++)
    			if (arr[j]<min)
    			{
    				min=arr[i];place=j;
    			}
    		if(place!=i)
    			swap(&arr[i],&arr[place]);
    	}
    	return;
    }
    
    void select2(int arr[],int n)
    {
    	int i=0,c=0,j=0,place=0,min=0;
    	min=arr[1];
    	for(i=c;i<n;i++)
    	{	for(j=i+1;j<=n;j++)
    			if (arr[j]<min)
    				{min=arr[i];place=j;}
    		swap(&arr[i],&arr[place]);		
    		c++;
    	}
    	return;
    }
    
  • 相关阅读:
    flex>导航
    flex>图表控件
    Struts2>Cannot find the tag library descriptor for /strutstags
    jsp>Smartupload例子代码
    flex>MXML语法
    解决JBoss只能通过localhost(127.0.0.1)而不能通过IP访问
    jsp>tomcat配置虚拟目录
    JSF>概述
    Struts2>中文乱码
    flex>HttpService
  • 原文地址:https://www.cnblogs.com/zhaoyl/p/2708958.html
Copyright © 2011-2022 走看看