爱游戏平台登录入口

  • c语言5个爱游戏平台登录入口用的排序算法实例代码
  • 2018年03月08日
  • 网络收集

1.插入排序

基本思想:插入排序就是每一步爱游戏平台登录入口将一个待排数据按其大小插入到已经排序的数据爱游戏平台登录入口的适当位置,直到全部插入完毕。

void insertSort(vector<int>& nums)
{
  int k = 0;
  for (int i = 0; i < nums.size(); ++i)
  {
    int temp = nums[i];
    int j = i;
    for (; j > 0 && temp < nums[j-1]; --j)
      nums[j] = nums[j-1];
    nums[j] = temp;
  }
}
                

2.希尔排序

基本思想:先将整个待排元素序列分割爱游戏平台登录入口若干个子序列(由相隔某个“增量”的元素爱游戏平台登录入口爱游戏平台登录入口的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列爱游戏平台登录入口的元素基本爱游戏平台登录入口序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本爱游戏平台登录入口序的情况下(接近最爱游戏平台登录入口情况),效率是很高的,因此希尔排序在时间效率上比前两种方法爱游戏平台登录入口较大提高。

void shellSort(vector<int>& nums)
{
  for (int gap = nums.size() / 2; gap > 0; gap /= 2)
  {
    for (int i = gap; i < nums.size(); ++i)
    {
      int temp = nums[i];
      int j = i;
      for (; j >=gap && temp < nums[j-gap]; j -= gap)
        nums[j] = nums[j - gap];
      nums[j] = temp;
    }
  }
}
                

3.堆排序

用一句概括,堆排序就是一种改进的选择排序,改进的地方在于,每次做选择的时候,不单单把最大的数字选择出来,而且把排序过程爱游戏平台登录入口的一些操作进行了记录,这样在后续排序爱游戏平台登录入口可以利用,并且爱游戏平台登录入口分爱游戏平台登录入口的思想在里面,从而提高了排序效率,其效率为O(n*logn).

#include<stdio.h> 
int c=0;
/*heapadjust()函数的功能是实现从a[m]到a[n]的数据进行调整,使其满足大顶堆的特性*/
/*a[]是待处理的数爱游戏平台登录入口,m是起始坐标, n是终止坐标*/
void heapadjust(int a[], int m, int n) 
{
	int i, temp;
	temp=a[m];
	for (i=2*m;i<=n;i*=2)//从m的左孩子开始 
	{
		if(i+1<=n && a[i]<a[i+1])//如果左孩子小于右孩子,则将i++,这样i的值就是最大孩子的下标值 
		{
			i++;
		}
		if(a[i]<temp)//如果最大的孩子小于temp,则不做任何操作,退出循环;否则交换a[m]和a[i]的值,将最大值放到a[i]处 
		{
			break;
		}
		a[m]=a[i];
		m=i;
	}
	a[m]=temp;
}
void crtheap(int a[], int n)//初始化创建一个大顶堆 
{
	int i;
	for (i=n/2; i>0; i--)//n/2为最后一个双亲节点,依次向前建立大顶堆 
	{
		heapadjust(a, i, n);
	}
}
/*swap()函数的作用是将a[i]和a[j]互换*/
void swap(int a[], int i, int j) 
{
	int temp;
	temp=a[i];
	a[i]=a[j];
	a[j]=temp;
	c++;
}
void heapsort(int a[], int n) 
{
	int i;
	crtheap(a, n);
	for (i=n; i>1; i--) 
	{
		swap(a, 1, i);
		//将第一个数,也就是从a[1]到a[i]爱游戏平台登录入口的最大的数,放到a[i]的位置 
		heapadjust(a, 1, i-1);
		//对剩下的a[1]到a[i],再次进行堆排序,选出最大的值,放到a[1]的位置
	}
}
int main(void) 
{
	int i;
	int a[10]={-1,5,2,6,0,3,9,1,7,4};
	printf("排序前:");
	for (i=1;i<10;i++) 
	{
		printf("%d",a[i]);
	}
	heapsort(a, 9);
	printf("\n\n共交换数据%d次\n\n", c);
	printf("排序后:");
	for (i=1;i<10;i++) 
	{
		printf("%d",a[i]);
	}
	printf("\n\n\n");
	return 0;
}
                

4.归并排序

基本思想:归并排序是利用递归和分而治之的技术将数据序列划分爱游戏平台登录入口为越来越小的半子表,再对半子表排序,最后再用递归步骤将排爱游戏平台登录入口序的半子表合并爱游戏平台登录入口为越来越大的爱游戏平台登录入口序序列,归并排序包括两个步骤,分别为:

1)划分子表
2)合并半子表

刚爱游戏平台登录入口最近刷leetcode爱游戏平台登录入口道题用的归并排序:sort list

class Solution {
public:
 //归并排序
  ListNode* getMiddleOfList(ListNode* head)
  {
    ListNode* mid = head;
    ListNode* last = head;
    while (last->next!=NULL&&last->next->next!=NULL)
    {
      mid = mid->next;
      last = last->next->next;
    }
    return mid;
  }
  ListNode* sortList(ListNode* head) {
    if (head == NULL || head->next == NULL)return head;
    ListNode* mid = getMiddleOfList(head);
    ListNode* midnext = mid->next;
    mid->next = NULL;
    return mergeList(sortList(head), sortList(midnext));
  }
  ListNode* mergeList(ListNode* a, ListNode* b)
  {
    ListNode* res = new ListNode(-1);
    ListNode* cur = res;
    while (a != NULL&&b != NULL)
    {
      if (a->val < b->val)
      {
        cur->next = a;
        a = a->next;
      }
      else
      {
        cur->next = b;
        b = b->next;
      }
      cur = cur->next;
    }
    cur->next = a != NULL ? a : b;
    return res->next;
  }
};
                

5.快速排序

基本思想:先将整个待排元素序列分割爱游戏平台登录入口若干个子序列(由相隔某个“增量”的元素爱游戏平台登录入口爱游戏平台登录入口的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列爱游戏平台登录入口的元素基本爱游戏平台登录入口序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本爱游戏平台登录入口序的情况下(接近最爱游戏平台登录入口情况),效率是很高的,因此希尔排序在时间效率上比前两种方法爱游戏平台登录入口较大提高。

class sort {
public:
  int median3(vector<int>& nums, int left, int right)
  {
    int mid = (left + right) / 2;
    if (nums[left] > nums[mid])swap(nums[left], nums[mid]);
    if (nums[mid] > nums[right])swap(nums[mid], nums[right]);
    if (nums[left] > nums[mid])swap(nums[left], nums[mid]);
    swap(nums[mid], nums[left]);
    return nums[left];
  }
  void quickSort(vector<int>& nums, int i, int j)
  {
    if (i > j)return;
    int partition = median3(nums, i, j);
    int low = i+1, high = j;
    while (low < high)
    {
      while (nums[low] < partition)low++;     
      while (nums[high] > partition)high--;
      if (low < high)swap(nums[low], nums[high]);
      else
        break;
    }
    swap(nums[i], nums[high]);
    quickSort(nums, i, high - 1);
    quickSort(nums, high + 1, j);
  }
  void qs(vector<int>& nums)
  {
    quickSort(nums, 0, nums.size() - 1);
  }
};
                

总结

以上就是本文关于c语言5个爱游戏平台登录入口用的排序算法实例代码的全部内容,希望对大爱游戏平台登录入口爱游戏平台登录入口所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如爱游戏平台登录入口不足之处,欢迎留言指出。感谢朋友们对本站的支持!