您的位置:首页 > 理论基础 > 数据结构算法

数据结构之排序整理C++

2017-03-22 13:04 274 查看
例题1:

给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200

插入排序:

题目代码:

#include<iostream>

using namespace std;

void Sort(int *a,int n)

{ //插入排序

  int i,j,temp,k;

  for(i=1;i<n;i++)

  {

     temp = a[i];

     for(j=i-1;j>=0&&a[j]>temp;j--)

     {

       a[j+1] = a[j];

     }

     a[j+1] = temp;

  }

}

int main()

{

  int n,*a;

  cin>>n;

  a = new int
;

  for(int i=0;i<n;i++)

  {

     cin>>*(a+i);

  }

  Sort(a,n);

  for(int i=0;i<n;i++)

  {

     cout<<*(a+i)<<" ";

  }

  delete [] a;

}

例题2:

冒泡排序:

输入一个随机数组,按照升序的方式进行输出

 

#include <iostream>

using namespace std;

 

void sort(int * num)

{

  int i, j = 0;

  for (i = 0; i <= 9; ++i)

  {

     for (j = 0; j < 10 - 1 - i; j++)

     {

       if (num[j] > num[j + 1])

       {

          int temp;

          temp = num[j];

          num[j] = num[j + 1];

          num[j + 1] = temp;

       }

     }

  }

}

 

 

int main()

{

  int number_[10] = { 0 };

 

  for (int i = 0; i < 10; i++)

  {

     cin >> number_[i];

  }

 

  sort(number_);

 

  for (int i = 0; i < 10; i++)

  {

     cout << number_[i] << endl;

  }

 

  return 0;

}

例题3:

归并算法:(效率最高)

 

 

#include <iostream>

 

 

using namespace std;

 

void mergearray(int *a, int first, int mid, int last, int temp[])

{

  int i = first;

  int j = mid + 1;

  int m = mid;

  int n = last;

  int k = 0;

  while (i <= m && j <= n)

  {

     if (a[i] <= a[j])

     {

       temp[k++] = a[i++];

     }

     else

     {

       temp[k++] = a[j++];

     }

  }

  while (i <= m)

  {

     temp[k++] = a[i++];

  }

  while (j <= n)

  {

     temp[k++] = a[j++];

  }

  for (i = 0; i < k; i++)

  {

     a[first + i] = temp[i]; 

  }

 

}

 

void mergesort(int *a, int first, int last, int temp[])

{

  if (first < last)

  {

     int mid = (first + last) / 2;

     mergesort(a, first, mid, temp);

     mergesort(a, mid+1, last, temp);

     mergearray(a, first, mid, last, temp);

  }

}

 

bool MergeSort(int *a, int n)

{

  int p[10] = { 0 };

  if (p == NULL)

  {

     return false;

  }

  mergesort(a, 0, n - 1, p);

  for (int i = 0; i < 10; i++)

  {

     cout << p[i] << endl;

  }

  return true;

}

 

 

int main()

{

  int a[10] = { 10,4,5,1,3,7,8,3,7,9 };

  MergeSort(a, 10);

 

  return 0;

 

}

例题4:

快速排序:

#include <iostream>

using namespace std;

 

void quick_sort(int *s, int l, int r)

{

  if (l < r)

  {

     int i = l;

     int j = r;

     int x = s[l];

     while (i < j)

     {

       while (i < j && s[j] >= x)

       {

          j--;

 

       }

       if (i < j)

       {

          s[i++] = s[j];

       }

 

       while (i < j && s[i] < x)

       {

          i++;

       }

       if (i < j)

       {

          s[j--] = s[i];

       }

     }

     s[i] = x;

     quick_sort(s, l, i - 1);

     quick_sort(s, i + 1, r);

  }

}

int main()

{

  int a[5] = { 5,4,3,2,1 };

  quick_sort(a, 0, 4);

  for (int i = 0; i < 5; i++)

  {

     cout << a[i] << endl;

  }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息