数据结构中的各种排序(2)

2019-02-15 18:11

else

low = mid+1; }

for (int j = i - 1 ; j > high ; --j ) {

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

a[j+1] = temp ; } }

void bubble_sort(int *a) //冒泡排序 {

int temp;

for (int i = 1 ; i < len ; ++i ) {

for (int j = 0 ; j < len - i ; ++j ) {

if (a[j] > a[j+1] ) {

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

void quick_sort(int *a , int low , int high) //快速排序 {

if (low < high ) {

int mid;

mid = one_quick_sort(a , low , high ); quick_sort(a , low , mid - 1 ); quick_sort(a , mid+1 , high ); } }

int one_quick_sort(int *a , int low , int high) //一趟快速排序 {

int temp;

while (low < high ) {

while ( a[low ] <= a[high] && low < high ) {

--high; }

temp = a[low]; a[low] = a[high]; a[high] = temp ;

while (a[low] <= a[high] && low

++low; }

temp = a[high] ; a[high] = a[low]; a[low] = temp; }

return low; }

void select_sort(int *a) //直接选择排序 {

int n,temp;

int t = len - 1 ;

for (int j = len - 1 ; j >= 0 ; --j,--t ) {

n = max_select_sort(a , t); if (j != n ) {

temp = a[n]; a[n] = a[j]; a[j] = temp ; } } }

int max_select_sort(int *a, int t) //选择最大数 {

int temp = a[0]; int flag = 0 ;

for (int i = 0 ; i <= t; ++i ) {

if (a[i] > temp ) {

temp = a[i]; flag = i ; } }

return flag; }

void merge_sort(int *a , int low , int high) {

if (low < high) {

int mid = (low + high) / 2 ; merge_sort(a , low , mid);

merge_sort(a , mid + 1 , high); msort(a , low , high , mid); } }

void msort(int *a , int low , int high,int mid) 数 {

int i = low,j = mid+1,*b,r = 0; b = new int[high - low]; while(i <= mid && j <= high) {

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

b[r] = a[i]; ++r ; ++i; } else {

b[r] = a[j]; ++j; ++r; } }

while (i <= mid ) {

b[r] = a[i]; ++r; ++i ; }

while (j <= high) {

b[r] = a[j]; ++j; ++r ; }

for (i = low ,j = 0 ; i <= high ; ++i ,++j ) {

//归并排序 //归并排序调用函 a[i] = b[j]; } }

void head_sort(int *a) //推排序 {

int temp ;

for (int i = len / 2 - 1 ; i>= 0 ; --i ) {

head_adgust(a , i , len); }

for ( i = len - 1 ; i >= 0 ; --i ) {

temp = a[0]; a[0] = a[i]; a[i] = temp;

head_adgust(a , 0 , i - 1 ); } }

void head_adgust(int *a , int low , int high) //调整的最大堆 {

int temp ;

for (int i = 2 * low + 1 ; i < high ; i = i * 2 +1 ) {

if (a[i] < a[i+1]) {

++i; }

if (a[low] > a[i]) {

break; } else {

temp = a[low]; a[low] = a[i]; a[i] = temp; low = i ; } } }

void shell_insert(int *a , int dk) 希尔插入函数 {

int temp;

for (int i = dk ; i < len ; ++i )

{

if (a[i] < a[i-dk]) {

temp = a[i];

for (int j = i - dk ; j >= 0 && temp < a[j] ; j = j-dk ) {

a[j+dk] = a[j]; }

a[j+dk] = temp ; } } }

void shell_sort(int *a) //希尔排序 {

int dks[3] = { 4 ,3, 1}; //定义步长 for (int i = 0 ; i < 3 ; ++i ) {

shell_insert(a , dks[i]); } }

void dadix_sort(int *a) //基数排序 {

sort(a , a + 15 , cmp2); sort(a , a + 15 , cmp1); }

int cmp1(int a,int b) //个位数比较函数 {

if (a / 10 < b /10) {

return 1; }

return 0; }

int cmp2(int a,int b) //十位数比较函数 {

if (a % 10 < b % 10 ) {

return 1; }

return 0; }

void rand_sort(int *a) //产生随机数据函数 {

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

{

a[i] = rand()0; } }

void display(int *a) //打印排序好之后的函数 {

for (int i = 0 ; i < len ; ++i ) {

cout<

cout<

D)调试分析;

1、测试数据:测试数据主要通过函数rang_sort(),自动生成一系列数据 2、各个模块 分别测试,1-9分别测试了9种排序 E)课程总结:

通过数据结构大型作业,算法主要在于思想,以及思路的严谨性。实战型很强。通过练习,编程能力以及算法思想大大提高。


数据结构中的各种排序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:SQLServer2008数据库应用教程课后答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: