#include<iostream>
#include<algorithm>
#include<ctime>
using namespace std;
#define random(a,b) (rand()%(b-a+1)+a)
void print_array(int *a);
void quick_sort(int *a, int l, int r){
int temp;
int i = l;
int j = r;
if(l <r ){
temp = a[l];
while(i != j){
while(j > i && a[j] > temp){
--j;
}
if(i < j){
a[i] = a[j];
++i;
}
while(i < j && a[i] < temp){
++i;
}
if(i < j){
a[j] = a[i];
--j;
}
}
a[i] = temp;
quick_sort(a, l, i-1);
quick_sort(a, i+1, r);
}
}
void bubble_sort(int *a, int len){
for(int i = 0; i < len - 1; i++){
for(int j = 0; j < len - 1 -i; j++){
if(a[j] > a[j+1]){
a[j]^=a[j+1]^=a[j]^=a[j+1];
}
}
}
}
void select_sort(int *a, int len){
int temp=0, index=0;
for(int i = 0; i < len; i++){
temp = a[i];
for(int j = i+1; j< len; j++){
if(temp > a[j]){
temp = a[j];
index = j;
}
}
a[index] = a[i];
a[i] = temp;
}
}
void insert_sort(int *a, int len){
for(int i = 1; i < len; i++){
int temp = a[i];
int j = 0;
for(j = i -1; j >= 0 && temp < a[j]; j--){
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
void merge_sort(int *a, int b[], int left, int right){
if(right - left > 1){
int mid = (left + right)/2;
int l = left, r = mid, i = left;
merge_sort(a, b, left, mid);
merge_sort(a, b, mid, right);
while(l < mid || r < right){
if(r >= right || (l < mid && a[l] < a[r])){
b[i++] = a[l++];
}else{
b[i++] = a[r++];
}
}
for(int j= left; j < right; j++){
a[j] = b[j];
}
}
}
void shell_sort(int *a, int len, int dk){
for(int i = dk; i < len; i++){
int temp = a[i];
int j = 0;
for(j = i -dk; j >= 0 && temp < a[j]; j-=dk){
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
void rand_array(int *a){
for(int i = 0; i < 20; i++){
a[i] = random(0,100);
}
}
void print_array(int *a){
for(int i = 0; i < 20; i++){
cout << a[i] << " ";
}
cout << endl;
}
int main(){
/*快速排序*/
int a[20];
cout<<"快速排序:";
rand_array(a);
print_array(a);
quick_sort(a, 0, 19);
print_array(a);
/*冒泡排序*/
cout<<"冒泡排序:";
rand_array(a);
print_array(a);
bubble_sort(a, 20);
print_array(a);
/*选择排序*/
cout<<"选择排序:";
rand_array(a);
print_array(a);
select_sort(a, 20);
print_array(a);
/*插入排序*/
cout<<"插入排序:";
rand_array(a);
print_array(a);
insert_sort(a, 20);
print_array(a);
/*归并排序*/
cout<<"归并排序:";
rand_array(a);
print_array(a);
int b[20];
merge_sort(a, b, 0, 20);
print_array(a);
/*希尔排序*/
cout<<"希尔排序(n小的时候可以排,大的时候重新选择间距):";
rand_array(a);
print_array(a);
int n = 20;
while(n/2 != 1){
shell_sort(a, 20, n/2);
n/=2;
}
shell_sort(a, 20, 1);
print_array(a);
}
选择排序、插入排序、冒泡排序、快速排序、归并排序和希尔排序代码
最新推荐文章于 2024-04-21 17:41:25 发布