常用排序算法C++实现以及复杂度

冒泡排序

int boblesort(int a[], int len)
{
	for(int i=len-1;i>0;i--)
	{
		int flag = 1;
		int index = 0;
		for (int j = 0; j < i; j++)
		{			
			if (a[j] > a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
				flag = 0;
				index = j+1;				
			}
		}
		i = index;
		if (flag == 1)
			break;
	}
	return 0;
}
int main()
{
	int a[] = {0,5,8,65,-48,6,13,894,8,5,2,-83,4,1000,1001,1002};
	int size = sizeof(a) / sizeof(int);
	boblesort(a, size);
	
	for (auto ret : a)
		cout << ret <<" ";
	cout << endl;
	system("pause");
	return 0;
}

选择排序

void choosesort(int a[], int len)
{
	for (int i = len-1; i >=0; i--)
	{
		int index=0;
		int max=a[0];
		for (int j=0; j < i;j++)
		{
			if (max <= a[j])
			{
				max = a[j];
				index = j;
			}
		}
		if (index == i)
			continue;
		a[index] = a[i];
		a[i] = max;
	}	
}

插入排序

int binaryseach(int a[], int len)
{
	int begin = 0;
	int end = len;
	while (begin < end)
	{
		int mid = (begin + end) >> 1;
		if (a[mid] > a[len])
		{
			end = mid;
		}
		else 
		{
			begin = mid + 1;
		}
	}
	return begin;
}

void insertsort(int a[], int len)
{
	for (int i = 1; i < len; i++)
	{
		int temp = a[i];
		int index=binaryseach(a, i);
		for (int j = i;j > index; j--)
		{
			a[j] = a[j - 1];
		}
		a[index] = temp;		
	}	
}

归并排序

void merge(int a[],int begin, int mid, int end)
{
	int temp[100];
	int li = 0,le=mid-begin;
	int ai = begin;
	int ri = mid,re=end;
	for (int i = 0; i <le; i++)
		temp[i] = a[i+begin];

	while (li < le)
	{
		if (ri<re && a[ri] < temp[li])
		{
			a[ai++] = a[ri++];
		}
		else
		{
			a[ai++] = temp[li++];
		}
	}	
}

void sort(int a[],int begin, int end)
{
	if (end - begin < 2) return;
	int mid = (end + begin) >> 1;
	sort(a,0, mid);
	sort(a,mid, end);
	merge(a, begin, mid, end);
}

快速排序

int pivot(int a[], int begin,int end)
{
    int temp = a[begin];
	--end;
	while (begin < end)
	{
		while (begin < end)
		{
			if (temp < a[end])
				end--;
			else
			{
				a[begin++] = a[end];
				break;
			}
		}

		while (begin < end) {
			if (temp > a[begin])
				begin++;
			else
			{
				a[end--] = a[begin];
				break;
			}
		}
	}
	a[begin] = temp;
    return begin;
}
void quicksort(int a[], int begin,int end)
{
	if (end - begin < 2) return;
	

	int mid=pivot( a, begin, end);

	quicksort(a, begin, mid);
	quicksort(a, mid+1, end);
}

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_34935373/article/details/108344931