冒泡排序,选择排序,快速排序算法以及比比效率

冒泡排序,选择排序,快速排序算法以及比比效率


```cpp
#include<iostream>
#include<ctime>
#include<iomanip>
#include<cstdlib>
#include<cmath>
using namespace std;
int main()
{	
int N;
	cin >> N;	
	int* arr = new int[N];	
	srand(time(NULL));	
	int i, j;	int temp;	
	clock_t start, end;//clock_t为CPU始终计时单元数	
	for (i = 0; i < N; i++)	
	{		arr[i] = rand() % 1000;	}//由于输出要排的数和排好的数要挺久的,如果要排的数很多那就要排很久,仅仅比效率的话先输出时间	//for (i = 0; i < N; i++)	
	//{	
	//	cout << arr[i] << " ";	
	//}
		start = clock();//获取CPU此时的时间单元数	
		for (i = 0; i < N - 1; i++)//因为是两个数之间交换交换轮数只用是比数字个数-1次,可以看成是两个数间空格的个数	
		{		
		for (j = 0; j < (N - 1) - i; j++)//每轮里面的比较为比较没排好的数,所以只需要循环到N-1-i		
		{			if (arr[j] > arr[j + 1])		
			{				
			temp = arr[j];			
				arr[j] = arr[j + 1];			
					arr[j + 1] = temp;			}	
						}	
						}	
						end = clock();//获取结束时的CPU时间单元数
			//for (i = 0; i < N; i++)	
			//{
				//	cout << arr[i] << " ";	
				//}	
				cout << endl;
					cout << "using time:" << fixed << setprecision(5) << double(end - start) / CLOCKS_PER_SEC << endl;
						return 0;
						}

```cpp
#include<iostream>
#include<cmath>
#include<ctime>
#include<iomanip>
#include<cstdlib>
using namespace std;
int main()
{	
clock_t start, end;	
int N;	
cin >> N;
	int* arr = new int[N];
		int i, j;	
		int k;//找一个标志来作为交换的判断条件	int min;//定义一个min来存储数组中比第一个数小的数来找到最小的那个数	srand(time(NULL));	
for (i = 0; i < N; i++)
	{		arr[i] = rand() % 1000;	}	//for(i=0;i<N;i++)	
	//{	
	//		cout<<arr[i]<<" ";	
	//}	
	cout << endl;	start = clock();//获取时间	for (i = 0; i < N; i++)
		{		k = i;	
			min = arr[i];//让排序开始的第一个数为min,以便后面不断比大小		
		for (j = i; j <N; j++)	
			{		
				if (arr[j] < min)		
					{	k = j;//当出现了符合条件的一个arr[j],就用k标志这个j,下面交换的时候才用得上				
					min = arr[j];			}	
						}			
						if (k != i)//要是要交换就是出现了符合条件的才交换,否则上面没出现要的东西也交换?	
				{			
				arr[k] = arr[i];		
					arr[i] = min;//交换,这里的min与arr[k],arr[j]没区别,但是由于arr[k]已经交换,所以要用min来当中间变量		
					}	
					}	
					end = clock();
						//for (i = 0; i < N; i++)	
						//{	
						//	cout << arr[i] << " ";	
						//}	
						cout << endl;	
						cout << "using time:" << fixed << setprecision(5) << double(end - start) / CLOCKS_PER_SEC << endl;	
						return 0;
						}
#include<iostream>
#include<cmath>
#include<ctime>
#include<iomanip>
#include<cstdlib>
using namespace std;
void quicksort(int arr[], int low, int high)//冒泡排序,比key小的放左边,比key大的放右边,然后分块递归继续
{	int i, j;	
int key;
	int temp;//交换变量	
	int origin;//用来把key放中间的变量	
	if (low < high)//由于要递归,所以用次判断条件进入排序	
	{		i = low;	
		j = high;	
			key = arr[low];	
				while (i < j)		
				{		
					while (i < j && arr[j] >= key)//先从右往左找一个比key小的值,如果没找到就一直j--,要是找到了,j也停留在一个下标上了,所以可以用此j		
					{				j--;			}		
						while (i < j && arr[i] <= key)//同上述,从左往右找大的		
						{				i++;			}		
							temp = arr[i];			
							arr[i] = arr[j];		
							arr[j] = temp;//交换第一次找到的两个数	
								}	
						origin = arr[i];		
						arr[i] = arr[low];//这里的arr[low]其实就是key		
						arr[low] = origin;//排完一次后,把key放到比它大和比他小的数的中间		//因为上面的循环条件是i<j,所以当不符合条件时就是他们相遇的地方		
		quicksort(arr, low, i - 1);		
		quicksort(arr, i + 1, high);//两边分快递归	}	
		else
				return;}
				int main()//常规输入输出代码放在主函数里
				{	
				clock_t start, end;
					int N;
					cin >> N;
		int* arr = new int[N];	
		srand(time(NULL));	
		int low = 0, high = N - 1;	
		for (int i = 0; i < N; i++)	
		{		arr[i] = rand() % 1000;	}  
		  //for (int j = 0; j < N; j++)	
		  //{	
		  //	cout << arr[j] << " ";	
		  //}	cout << endl;	
		  start = clock();	
		  quicksort(arr, low, high);	
		  end = clock();	
		  //for (int p = 0; p < N; p++)	
		  //{	
		  //	cout << arr[p] << " ";	
		  //}	
		  cout << endl << "using time:" << fixed << setprecision(5) << double(end - start) / CLOCKS_PER_SEC << endl;	
		  return 0;}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值