各种排序

举报
IM_STONE 发表于 2020/12/28 23:38:06 2020/12/28
【摘要】 #include<iostream> using namespace std; //直接插入排序 void Insert(int *arr, int len) { for(int i=0;i<len-1;++i) { if(arr[i+1]<arr[i]) { int k=i; int tep = arr[i+1]; while(arr[k]&...
#include<iostream>
using namespace std;

//直接插入排序
void Insert(int *arr, int len)
{ for(int i=0;i<len-1;++i) { if(arr[i+1]<arr[i]) { int k=i; int tep = arr[i+1]; while(arr[k]>tep && k>=0) { arr[k+1] = arr[k]; k--; } arr[k+1]  =tep; } }
}

void show(int *arr, int len)
{ for(int i=0;i<len;++i) { cout<<arr[i]<<' '; } cout<<endl;
}
//希尔排序
void Shell(int *arr , int len, int d)
{ for(int i=d;i<len;i++) { if(arr[i]<arr[i-d]) { int tep= arr[i]; arr[i] = arr[i-d]; arr[i-d] = tep; } }
}
//冒泡排序
void Pop(int *arr , int len)
{ if(arr==NULL) { return ; } for(int j=1;j<len;j++) { int flg=0; for(int i=0;i<len-1;++i) { if(arr[i]>arr[i+1]) { int tep = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tep; flg=1; } } if(flg==0) { break; } }
}
//双向冒泡排序
void Doupop(int *arr , int len)
{ if(arr == NULL) { return; } int swap=1; for(int i=1; swap!=0; ++i) { swap=0; for(int j=i;j<len;++j) { if(arr[j-1]>arr[j]) { int tep = arr[j]; arr[j] = arr[j-1]; arr[j-1] = tep; swap=1; } } for(int j=len-i; j>=0; j--) { if(arr[j]<arr[j-1]) { int tep = arr[j]; arr[j] = arr[j-1]; arr[j-1] = tep; } } }
}

//快速排序
int  Partion(int *arr , int beg, int end)
{ int tep = arr[beg]; while(beg<end) { while(beg<end && arr[end]>=tep) { end--; } if(beg<end) { arr[beg] = arr[end]; beg++; } while(beg<end&& arr[beg]<=tep) { beg++; } if(beg<end) { arr[end] = arr[beg]; end--; } } arr[beg] = tep; return beg;
}

void QuitSort(int *arr , int beg, int end)
{ if(arr==NULL) { return ; } int i; if(beg<end) { i = Partion(arr , beg, end); QuitSort(arr , beg , i-1); QuitSort(arr , i+1,end); }
}
//直接选择排序
void SelectSort(int *arr , int n)
{ int min; int k; for(int i=0;i<n-1;++i) { min = arr[i]; for(int j=i+1;j<n;++j) { if(arr[j]<min) { min = arr[j]; k=j; } } if(k!=i) { int tep = arr[i]; arr[i] = arr[k]; arr[k] = tep; } }
}

//堆排序学习的是海子老师的算法;
void HeapAdjust(int *a,int i,int size)  //调整堆 
{ int lchild=2*i; //i的左孩子节点序号  int rchild=2*i+1; //i的右孩子节点序号  int max=i; //临时变量  if(i<=size/2) //如果i是叶节点就不用进行调整  { if(lchild<=size&&a[lchild]>a[max]) { max=lchild; } if(rchild<=size && a[rchild]>a[max]) { max=rchild; } if(max!=i ) { swap(a[i],a[max]); if(max<size/2) { HeapAdjust(a,max,size); //避免调整之后以max为父节点的子树不是堆  } } }
}

void BuildHeap(int *a,int size) //建立堆 
{ int i; for(i=size/2;i>0;i--) //非叶节点最大序号值为size/2  { HeapAdjust(a,i,size); } } 

void HeapSort(int *a,int size) //堆排序 
{ int i; BuildHeap(a,size); for(i=size;i>=1;i--) { //cout<<a[1]<<" "; swap(a[1],a[i]); //交换堆顶和最后一个元素,即每次将剩余元素中的最大者放到最后面  //BuildHeap(a,i-1); //将余下元素重新建立为大顶堆  HeapAdjust(a,1,i-1); //重新调整堆顶节点成为大顶堆 }
} int main()
{ int arr[] = {-1,9,8,7,6,5,4,3,2,1,0}; int len =  sizeof(arr)/sizeof(arr[0]); /*cout<<len<<endl; Insert(arr , len); show(arr,len); cout<<endl; for(int i=4;i>=0;i--) { Shell(arr, len , i); } show(arr, len); Pop(arr , len); Doupop(arr , len); QuitSort(arr , 0, len-1); SelectSort(arr , len);*/ HeapSort(arr , len-1); show(arr, len); return 0;
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244

文章来源: blog.csdn.net,作者:IM-STONE,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/doubleintfloat/article/details/52657729

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。