zoukankan      html  css  js  c++  java
  • 排序

    1.冒泡排序

    方法1
    #include <iostream>
    using namespace std;
    int main()
    {
    	int a[10] = { 9,7,6,4,10,8,5,3,1,2 };
    	int i, j;
    	int t;
    	int length = sizeof(a)/sizeof(a[0]); //获取数组长度
    	for (i = 0; i <= length - 1; i++)
    	{
    		for (j = 0; j <= length - 2; j++) //若为length-1数组越界
    		{
    			if (a[j] > a[j + 1])
    			{
    				t = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = t;
    			}
    		}
    	}
    	for (i = 0; i <= length - 1; i++)
    	{
    		cout << a[i] << endl;
    	}
    	return 0;
    }
    
    方法2(每遍历一遍判断是否排序完成,能够提前结束)
    #include <iostream>
    using namespace std;
    int main()
    {
    	int a[10] = { 9,7,6,4,10,8,5,3,1,2 };
    	int i, j;
    	int t;
    	int length = sizeof(a)/sizeof(a[0]); //获取数组长度
    	bool flag = false;
    	for (i = 0; i <= length - 1 && !flag; i++)
    	{
    		flag = true;
    		for (j = 0; j <= length - 2; j++) //若为length-1数组越界
    		{
    			if (a[j] > a[j + 1])
    			{
    				t = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = t;
    				flag = false;
    			}
    		}
    	}
    	for (i = 0; i <= length - 1; i++)
    	{
    		cout << a[i] << endl;
    	}
    	return 0;
    }
    
    方法3(在每次排序后会有最大值出现在该次排序的末尾,此最大值不参与下一次的排序;可能一次会排好最大值和第二大值等,故设置upto=j而不是n--)
    #include <iostream>
    using namespace std;
    int main()
    {
    	int a[10] = { 9,7,6,4,10,8,5,3,1,2 };
    	int i, j;
    	int t;
    	int length = sizeof(a)/sizeof(a[0]); //获取数组长度
    	int n = length - 1;
    	int upto = 0;
    	for (i = 0; i <= length - 1; i++)
    	{
    		for (j = 0; j <= n - 1; j++) //若为length数组越界
    		{
    			if (a[j] > a[j + 1])
    			{
    				t = a[j + 1];
    				a[j + 1] = a[j];
    				a[j] = t;
    				upto = j;
    			}
    		}
    		n = upto;
    	}
    	for (i = 0; i <= length - 1; i++)
    	{
    		cout << a[i] << endl;
    	}
    	return 0;
    }
    
    方法4(每次循环排序好最大值最小值,并判断没有排序号的范围以进行下次循环排序的优化)
    #include <iostream>
    using namespace std;
    int main()
    {
    	int a[10] = { 9,7,6,4,10,8,5,3,1,2 };
    	int i;
    	int length = sizeof(a)/sizeof(a[0]); //获取数组长度
    	int first = 0;
    	int last = length - 1;
    	int t;
    	while (first < last)
    	{
    		int nfirst = first, nlast = last;//用于判断循环中有无变换以及未排序好的范围
    		for (i = first; i <= last - 1; i++) //正向循环
    		{
    			if (a[i] > a[i + 1])
    			{
    				nlast = i;
    				t = a[i];
    				a[i] = a[i + 1];
    				a[i + 1] = t;
    			}
    		}//将最大值排到最后
    		if (nlast == last) //若此次循环没发生变换即排序完成
    		{
    			break;
    		}
    		last = nlast;
    		for (i = last; i >= first + 1; i--) //逆向循环
    		{
    			if (a[i] < a[i - 1])
    			{
    				nfirst = i;
    				t = a[i];
    				a[i] = a[i - 1];
    				a[i - 1] = t;
    			}
    		}
    		if (nfirst == first) //若此次循环没发生变换即排序完成
    		{
    			break;
    		}
    		first = nfirst;
    	}
    	for (i = 0; i <= length - 1; i++)
    	{
    		cout << a[i] << endl;
    	}
    	return 0;
    }
    

    2.选择排序

  • 相关阅读:
    List Available DBCC Commands
    DBCC
    Oracle Shared Pool机制之——Latches, Locks, Pins and Mutexes
    新春寄语——令人期待的2018
    Oracle Shared Pool之Library Cache
    Linux NTP服务配置 for Oracle RAC
    Oracle 12c启动时PDBs的自动打开
    Oracle RAC时间同步(NTP/CTSS)
    Oracle 11g后台进程一览表
    Selenium WebDriver-通过断言页面是否存在某些关键字来确定页面按照预期加载
  • 原文地址:https://www.cnblogs.com/kkyblog/p/11193392.html
Copyright © 2011-2022 走看看