数据结构 排序算法

目录

 

一、选择排序

二、冒泡排序

三、直插排序

四、希尔排序

五、快速排序

六、归并排序

七、堆排序


一、选择排序

//选择排序 
void SelectSort(int arr[], int len)
{
	for(int i=0;i<len;i++)
	{
		int min=arr[i];
		int minIndex=i;
		for(int j=i+1;j<len;j++)
		{
			if(arr[j]<min)
			{
				min=arr[j];
				minIndex=j;
			}
		}
		arr[minIndex]=arr[i];
		arr[i]=min;
	}
}

二、冒泡排序

//冒泡排序 
void BubbleSort(int arr[], int len)
{
	for(int i=0;i<len-1;i++)
	{
		for(int j=0;j<len-1;j++)
		{
			if(arr[j+1]<arr[j])
			{
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
}

三、直插排序

//直插排序 
void InsertSort(int arr[], int len)
{
	int i,j;
	for(i=1;i<len;i++)
	{
		int key=arr[i];
		for(j=i-1;j>=0;j--)
		{
			if(key<arr[j])
				swap(arr[j],arr[j+1]);
		}
	}
}

四、希尔排序

//希尔排序 
void ShellSort(int arr[], int len)
{
	int gap=len/2;
	while(gap>0)
	{
		for(int i=gap;i<len;i+=gap)
		{
			int key=arr[i];
			for(int j=i-gap;j>=0;j-=gap)
			{
				if(key<arr[j])
					swap(arr[j],arr[j+gap]);
			}
		}
		gap/=2;
	}
}

五、快速排序

//找到中值
int partition(int *arr, int l, int r)
{
	int key=arr[l];
	int i=l+1,j=r;
	while(i<=j)
	{
		while(arr[i]<key)
			i++;
		while(arr[j]>key)
			j--;
		if(i<j)
			swap(arr[i++],arr[j--]);
		else
			i++;
	}
	swap(arr[l],arr[j]);
	
	return j;
}

//快速排序
void QuickSort(int *arr, int l, int r)
{
	if(l<r)
	{
		int partitionIndex=partition(arr,l,r);
		QuickSort(arr,l,partitionIndex-1);
		QuickSort(arr,partitionIndex+1,r);
	}
}

六、归并排序

//合并两个有序数组
void merge(int *arr, int l, int m, int r)
{
	int *temp=new int[r-l+1];
	int i=l, j=m+1, count=0;
	while(i<=m && j<=r)
	{
		if(arr[i]<=arr[j])
			temp[count++]=arr[i++];
		else if(arr[i]>arr[j])
			temp[count++]=arr[j++];
	}
	while(i<=m)
		temp[count++]=arr[i++];
	while(j<=r)
		temp[count++]=arr[j++];
	for(i=0,j=l;i<count;i++,j++)
		arr[j]=temp[i];
}

//归并排序
void MergeSort(int *arr, int l, int r)
{
	if(l<r)
	{
		int m=(l+r)/2; 
		MergeSort(arr,l,m);
		MergeSort(arr,m+1,r);
		merge(arr,l,m,r);
	}
}

七、堆排序

void adjust(int *arr, int len, int index)
{
	int left=2*index+1;
	int right=2*index+2;
	
	int maxIndex=index;
	if(left<len && arr[left]>arr[maxIndex]) maxIndex=left;
	if(right<len && arr[right]>arr[maxIndex]) maxIndex=right;
	
	if(maxIndex!=index)
	{
		swap(arr[index],arr[maxIndex]);
		adjust(arr,len,maxIndex);
	}
} 

void HeapSort(int *arr, int len)
{
	for(int i=len/2-1;i>=0;i--)
		adjust(arr,len,i);
	for(int j=len-1;j>=1;j--)
	{
		swap(arr[j],arr[0]);
		adjust(arr,j,0);
	}
}

 

发布了17 篇原创文章 · 获赞 3 · 访问量 3392
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览