【排序】

一、冒泡排序

int main()
{
    int array[]={34,65,12,43,67,5,78,10,3,70};  
    int len=sizeof(array)/sizeof(int);
    for(int i=0; i<len-1 ;i++)
    {
    	for(int j=i; j<len; j++)
    	{
	    	if(array[i]>array[j])
	    	{
	    		int temp=array[i];
	    		array[i]=array[j];
	    		array[j]=temp;
	    	}
	    }
    }
    for(int i = 0; i < len ;i++)
    {
    	cout<<array[i]<<' ';
    }
    return 0;
}

二、快速排序

void quickSort(int array[],int low, int high)
{
	if(low>=high) return;
	int left=low;
	int right=high;
	int key=array[low];//将第一个作为key 
	while(left<right)
	{
		while(left<right && array[right]>=key )//从右往左找第一个小于key的数
		{   right--;  } 
		array[left] = array[right];
		while(left<right && array[left]<=key)
		{  left++;  }
		array[right] = array[left];
	}
	array[right]=key;//记录key 
	quickSort(array,low,left-1);
	quickSort(array,right+1,high);
}

int main(){
    int array[]={34,65,12,43,67,5,78,10,3,70};  
    int len=sizeof(array)/sizeof(int);
    quickSort(array,0,len-1);
    for(int i=0; i<len; i++)
    {
	cout<<array[i]<<" ";
    } 
    return 0;
}

三、归并排序

/*-----------------------递归 ----------------------------*/ 
void merge(int *arr,int* res , int low, int high)
{
	int mid = (int)((low+high)/2);
	int i = low,j=mid,k=low;
	while(i<mid && j<high) res[k++] = arr[i]<arr[j] ? arr[i++] : arr[j++];
	while(i<mid) res[k++] = arr[i++];
	while(j<high) res[k++] = arr[j++];
	for(k=low ;k < high ; k++) arr[k]=res[k];
}

void merge_sort_re(int* arr , int* res, int low, int high) 
{
	if((high-low)<=1) return; //最后划分成2个为一组 
	int mid = (int)((low+high)/2);
	merge_sort_re(arr,res,low,mid);
	merge_sort_re(arr,res,mid,high);
	merge(arr,res,low,high);
}

/*-----------------------迭代 ----------------------------*/ 
void merge_sort_it(int* arr , int len)
{
	int res[len];

	for(int step = 1; step<len ; step*=2)
	{
		for(int beg = 0; beg<len ; beg+=step*2)
		{
			int low = beg, mid = min(beg+step,len), high = min(beg+step*2,len);
			int i=low,j=mid,k=low;
			while(i<mid && j<high) res[k++] = arr[i]<arr[j] ? arr[i++] : arr[j++];
			while(i<mid) res[k++] = arr[i++];
			while(j<high) res[k++] = arr[j++];
			for(k=low ;k < high ; k++) arr[k]=res[k];			
		}
	}
}

void merge_sort(int* arr, int len)
{
	if(arr == NULL || len<=0) return;
	int res[len];
	merge_sort_re(arr , res , 0 ,len);//递归 
	//merge_sort_it(arr , len);//迭代 
}

int main()
{
	int arr[] = {22,44,1,3,5,7,96,35};
	int len = sizeof(arr)/sizeof(int);
	merge_sort(arr,len);
	for(int i = 0 ; i<len ;i++)
	{
		cout<<arr[i]<<' ';
	}
	cout<<endl; 
}

四、选择排序

void selectSort(int* arr,int len)
{
	for(int i = 0; i<len-1; i++)
	{
		int key = i;
		for(int j = i+1; j<len ; j++)
		{
			if(arr[key]>arr[j]) key=j;
		}
		if(key!=i)
		{
			int temp = arr[i];
			arr[i] = arr[key];
			arr[key] = temp;
		}
	}
}

五、插入排序

void insert_sort(int* arr,int len)
{
	for(int i = 1; i < len ; i++)
	{
		int key = arr[i];
		int j = i-1;
		while(j>=0 && arr[j]>key)
		{
			arr[j+1] = arr[j];
			j--;
		}
		arr[j+1] = key;
	}
}

猜你喜欢

转载自blog.csdn.net/yiyao8236/article/details/79863585