數據結構之排序整理C++

例題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[n];
  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;
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章