zoukankan      html  css  js  c++  java
  • 排序算法

    交换排序算法主要有:(1)冒泡法(2)快速排序法

    冒泡法:两两相邻记录进行比较,如果反序这交换,直到没有反序的记录为止。

      

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    //这种交换方式效率较低
    vector<int> BubbleSort(vector<int> &vec)
    {
        for(int i=0; i<vec.size(); i++)
        {
            for(int j = i+1; j<vec.size(); j++)
            {
                if(vec[i] > vec[j])
                {
                    // exchange using XOR
                    vec[i] = vec[i] ^ vec[j];
                    vec[j] = vec[i] ^ vec[j];
                    vec[i] = vec[i] ^ vec[j];
                }
            }
        }
        return vec;
    }
    
    //这种交换方式效率较高
    vector<int> BubbleSort2(vector<int> vec)
    {
        for(int i=0; i<vec.size(); i++)
        {
            for(int j=vec.size()-1; j>i; j--)
            {
                if(vec[j] < vec[j-1])
                {
                    // exchange using XOR
                    vec[j] = vec[j] ^ vec[j-1];
                    vec[j-1] = vec[j] ^ vec[j-1];
                    vec[j] = vec[j] ^ vec[j-1];
                }
            }
        }
    
        return vec;
    }
    
    
    //这种交换方式效率更高,使用了一个标记符号flag避免无意义的循环
    vector<int> BubbleSort3(vector<int> vec)
    {
        bool flag = true;
        for(int i=0; i < vec.size() && flag; i++)
        {
            flag = false;
            for(int j=vec.size()-1; j>i; j--)
            {
                if(vec[j] < vec[j-1])
                {
                    // exchange using XOR
                    vec[j] = vec[j] ^ vec[j-1];
                    vec[j-1] = vec[j] ^ vec[j-1];
                    vec[j] = vec[j] ^ vec[j-1];
                    flag = true;
                }
            }
        }
    
        return vec;
    }
    
    int main()
    {
        vector<int> vec;
        int temp;
        cout<<"please input the data source, 
        integer in on row separated by space or comma"<<endl;
        while(1)
        {
            cin>>temp;
            vec.push_back(temp);
            if(cin.get() == '
    ') break;
        }
    
        vector<int> sorted_vec = BubbleSort3(vec);
    
        vector<int>::iterator iter = sorted_vec.begin();
        for(; iter != sorted_vec.end(); iter++)
        {
            cout<<*iter<<" ";
        }
    
        return 0;
    }
    

       快速排序:通过一趟排序将待排序的记录分割成独立的两个部分,其中一部分记录的值比关键字小,另一部分的记录都比关键字大。然后对着独立的部分进行递归操作,即可得到最后的排序结果。

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    void QSort(int a[], int left, int right)
    {
    	if(left >= right)
    	{
    		return;
    	}
    	int i = left;
    	int j = right;
    	int key = a[left];  //用第一个记录作为关键字
    
    	while(i<j)
    	{
    		while(i<j && key <= a[j])
    		{
    			j--;        //向左寻找
    		}
    		a[i] = a[j];    //找到一个比key小的元素,放在i的位置上
    		while(i<j && key >= a[i])
    		{
    			i++;
    		}
    		a[j] = a[i];
    	}
    
    	a[i] = key;         //按照主键分类完成后,将主键放到中间的位置上
    	QSort(a, left,i-1); //按照同样的方法,对划分出来的子集,再次做快速排序
    	QSort(a, i+1, right);
    }
    
    int main()
    {
    	int src[100];
    	int len = 0;
    	cout<<"please input the data source :"<<endl;
    
    	while(1)
    	{
    		cin>>src[len++];
    		if(cin.get() == '
    ') break;
    	}
    	QSort(src,0,len-1);
    
    	for(int i=0; i<len; i++)
    	{
    		cout<<src[i]<<" ";
    	}
    	
    	cin.get();
    	return 0;
    
    }
    

      

  • 相关阅读:
    错误提示:Wrong Local header signature: 0xE011CFD0
    “CreateRiaClientFilesTask”任务意外失败。 未能加载文件程序集“System.ComponentModel.DataAnnot...
    jquery tagsinput监听输入、修改、删除事件
    bootstrap之常见组件应用1
    多啦A梦的制作
    Java 多线程
    Java集合的复习
    10种排序算法分析
    C++ 中vector的学习
    android学习流程确立
  • 原文地址:https://www.cnblogs.com/fangying7/p/4670381.html
Copyright © 2011-2022 走看看