数据结构之排序整理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;
}
}
给定一个长度为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;
}
}
相关文章推荐
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- C++代码,数据结构-外部排序-置换-选择排序
- 数据结构之C/C++实现2个交换类排序
- C++数据结构与STL--选择排序
- 数据结构与算法:C++实现选择排序
- 数据结构与算法C++ 第二章 练习题 Part-B (排序乐园升级版)
- [C++]数据结构:排序算法Part2----快速排序、归并排序、箱子排序、基数排序
- 数据结构复习:交换排序原理及C++实现
- 数据结构课程设计-通讯录管理系统c++版(顺序表存储,折半查找,递增排序)
- 数据结构与算法整理之排序(一)
- C++代码,数据结构-外部排序-败者树
- 数据结构之插入排序之希尔排序(缩小增量排序)—参考整理严蔚敏数据结构
- 数据结构(C++版)笔记整理————第五章
- C++数据结构知识点整理
- Java数据结构与算法之选择排序_动力节点Java学院整理
- 数据结构之交换排序之快速排序(参考整理严蔚敏数据结构)
- 数据结构基础算法整理归纳:选择排序(四)
- 数据结构(C++版)笔记整理——第二章
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序