冒泡:将要排序的n个数字两个两个互相比较,小的放前面大的放后面,排序n-1遍。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int * ArrayCreate(int*);
void MaopaoSort(int *,int);
void traverse(int *,int);
int main(){
int *arr,num;
arr=ArrayCreate(&num);
MaopaoSort(arr,num);
traverse(arr,num);
return 0;
}
int * ArrayCreate(int* num){
printf("请输入数组的数量:");
scanf("%d",num);
int *arr=(int *)malloc(sizeof(int)*(*num));
printf("请输入数组的数字:\n");
for(int i=0;i<*num;i++)
scanf("%d",&arr[i]);
return arr;
}
void traverse(int *arr,int num){
for(int i=0;i<num;i++)
printf("%d ",arr[i]);
printf("\n");
}
void MaopaoSort(int *arr,int num){
int i,j;
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
C++代码:
#include <iostream>
class ArraySort{
public:
int *arr;
int num;
ArraySort();
void MaopaoSort();
void traverse();
};
int main(){
ArraySort array;
array.MaopaoSort();
array.traverse();
return 0;
}
ArraySort::ArraySort(){
std::cout<<"请输入数组的数量:";
std::cin>>num;
arr=new int(num);
std::cout<<"请输入数组的数字:\n";
for(int i=0;i<num;i++)
std::cin>>arr[i];
}
void ArraySort::traverse(){
for(int i=0;i<num;i++)
std::cout<<arr[i]<<" ";
std::cout<<"\n";
}
void ArraySort::MaopaoSort(){
int i,j;
for(i=0;i<num-1;i++){
for(j=i+1;j<num;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
插入:前1个数字必然有序,然后将第二数字插入前面的数字并保证有序,然后将第三个数组插入前面的数字并保证有序。。。。。。将第n个数组插入前面某个位置保证有序。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int * ArrayCreate(int*);
void CharuSort(int *,int);
void traverse(int *,int);
int main(){
int *arr,num;
arr=ArrayCreate(&num);
CharuSort(arr,num);
traverse(arr,num);
return 0;
}
int * ArrayCreate(int* num){
printf("请输入数组的数量:");
scanf("%d",num);
int *arr=(int *)malloc(sizeof(int)*(*num));
printf("请输入数组的数字:\n");
for(int i=0;i<*num;i++)
scanf("%d",&arr[i]);
return arr;
}
void traverse(int *arr,int num){
for(int i=0;i<num;i++)
printf("%d ",arr[i]);
printf("\n");
}
void CharuSort(int *arr,int num){
int i,j;
for(j=1;j<num;j++){
int index=j;
for(i=j-1;i>=0;i--){
if(arr[i]>arr[index]){
int temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
index--;
}
}
}
}
C++代码:
#include <iostream>
class ArraySort{
public:
int *arr;
int num;
ArraySort();
void CharuSort();
void traverse();
};
int main(){
ArraySort array;
array.CharuSort();
array.traverse();
return 0;
}
ArraySort::ArraySort(){
std::cout<<"请输入数组的数量:";
std::cin>>num;
arr=new int(num);
std::cout<<"请输入数组的数字:\n";
for(int i=0;i<num;i++)
std::cin>>arr[i];
}
void ArraySort::traverse(){
for(int i=0;i<num;i++)
std::cout<<arr[i]<<" ";
std::cout<<"\n";
}
void ArraySort::CharuSort(){
int i,j;
for(j=1;j<num;j++){
int index=j;
for(i=j-1;i>=0;i--){
if(arr[i]>arr[index]){
int temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
index--;
}
}
}
}
选择:n个数组排序,先从前n个数字中最大(最小)的放在最前面,然后从后n-1个数字最小(最大)的数字放在第二个。。。。。。将最后一个数字放在最后。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int * ArrayCreate(int*);
void MaopaoSort(int *,int);
void traverse(int *,int);
int main(){
int *arr,num;
arr=ArrayCreate(&num);
MaopaoSort(arr,num);
traverse(arr,num);
return 0;
}
int * ArrayCreate(int* num){
printf("请输入数组的数量:");
scanf("%d",num);
int *arr=(int *)malloc(sizeof(int)*(*num));
printf("请输入数组的数字:\n");
for(int i=0;i<*num;i++)
scanf("%d",&arr[i]);
return arr;
}
void traverse(int *arr,int num){
for(int i=0;i<num;i++)
printf("%d ",arr[i]);
printf("\n");
}
void MaopaoSort(int *arr,int num){
int i,j;
for(i=0;i<num;i++){
int min_value=arr[i];//记录待排数的最小值
int min_index=i;//记录待排数的最小值下标
for(j=i+1;j<num;j++){
if(arr[i]>arr[j]){
min_value=arr[j];//循环找到最小值
min_index=j;//循环找到最小值的下标
}
}
if(min_index!=i){//交换
int temp=arr[i];
arr[i]=arr[min_index];
arr[min_index]=temp;
}
}
}
C++代码:
//与冒泡相似
#include <iostream>
class ArraySort{
public:
int *arr;
int num;
ArraySort();
void XuanzeSort();
void traverse();
};
int main(){
ArraySort array;
array.XuanzeSort();
array.traverse();
return 0;
}
ArraySort::ArraySort(){
std::cout<<"请输入数组的数量:";
std::cin>>num;
arr=new int(num);
std::cout<<"请输入数组的数字:\n";
for(int i=0;i<num;i++)
std::cin>>arr[i];
}
void ArraySort::traverse(){
for(int i=0;i<num;i++)
std::cout<<arr[i]<<" ";
std::cout<<"\n";
}
void ArraySort::XuanzeSort(){
int i,j;
for(i=0;i<num;i++){
int min_value=arr[i];//记录待排数的最小值
int min_index=i;//记录待排数的最小值下标
for(j=i+1;j<num;j++){
if(arr[i]>arr[j]){
min_value=arr[j];//循环找到最小值
min_index=j;//循环找到最小值的下标
}
}
if(min_index!=i){//交换
int temp=arr[i];
arr[i]=arr[min_index];
arr[min_index]=temp;
}
}
}
归并排序:n个数字,先2个2个排序,然后4个4个排序。。。。。。最后整体排序有序。
C代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
int * ArrayCreate(int*);
void MergeSort(int *,int);
void traverse(int *,int);
void MergeArray(int first,int mid,int last,int temp[]);
void mergesort(int *arr,int first,int last,int temp[]);
int main(){
int *arr,num;
arr=ArrayCreate(&num);
MergeSort(arr,num);
traverse(arr,num);
return 0;
}
int * ArrayCreate(int* num){
printf("请输入数组的数量:");
scanf("%d",num);
int *arr=(int *)malloc(sizeof(int)*(*num));
printf("请输入数组的数字:\n");
for(int i=0;i<*num;i++)
scanf("%d",&arr[i]);
return arr;
}
void traverse(int *arr,int num){
for(int i=0;i<num;i++)
printf("%d ",arr[i]);
printf("\n");
}
void MergeSort(int *arr,int num){
int *temp=(int *)malloc(sizeof(int)*num);
if(temp==NULL){
printf("空间分配失败,GG!\n");
exit(-1);
}
mergesort(arr,0,num-1,temp);
free(temp);//释放临时存储数组的空间
return;
}
void MergeArray(int arr[],int first,int mid,int last,int temp[]){
int i=first,j=mid+1;//找到左右两边的开头第一位
int m=mid,n=last;//找到左右两边的最后一位
int k=0;
while(i<=m && j<=n){
if(arr[i]<=arr[j])
temp[k++]=arr[i++];
else
temp[k++]=arr[j++];
}
while(i<=m)
temp[k++]=arr[i++];
while(j<=m)
temp[k++]=arr[j++];
for(i=0;i<k;i++){
arr[first+i]=temp[i];
}
}
void mergesort(int arr[],int first,int last,int temp[]){
if(first < last){
int mid=(first+last)/2;
mergesort(arr,first,mid,temp);
mergesort(arr,mid+1,last,temp);
MergeArray(arr,first,mid,last,temp);
}
}
C++代码:
#include <iostream>
class ArraySort{
public:
int *arr;
int num;
ArraySort();
void MergeSort();
void traverse();
void MergeArray(int first,int mid,int last,int temp[]);
void mergesort(int first,int last,int temp[]);
};
int main(){
ArraySort array;
array.MergeSort();
array.traverse();
return 0;
}
ArraySort::ArraySort(){
std::cout<<"请输入数组的数量:";
std::cin>>num;
arr=new int(num);
std::cout<<"请输入数组的数字:\n";
for(int i=0;i<num;i++)
std::cin>>arr[i];
}
void ArraySort::traverse(){
for(int i=0;i<num;i++)
std::cout<<arr[i]<<" ";
std::cout<<"\n";
}
void ArraySort::MergeSort(){
int *temp=new int(num);
if(temp==NULL){
std::cout<<"空间分配失败,GG!";
exit(-1);
}
mergesort(0,num-1,temp);
delete [] temp;//释放临时存储数组的空间
return;
}
void ArraySort::MergeArray(int first,int mid,int last,int temp[]){
int i=first,j=mid+1;//找到左右两边的开头第一位
int m=mid,n=last;//找到左右两边的最后一位
int k=0;
while(i<=m && j<=n){
if(arr[i]<=arr[j])
temp[k++]=arr[i++];
else
temp[k++]=arr[j++];
}
while(i<=m)
temp[k++]=arr[i++];
while(j<=m)
temp[k++]=arr[j++];
for(i=0;i<k;i++){
arr[first+i]=temp[i];
}
}
void ArraySort::mergesort(int first,int last,int temp[]){
if(first < last){
int mid=(first+last)/2;
mergesort(first,mid,temp);
mergesort(mid+1,last,temp);
MergeArray(first,mid,last,temp);
}
}
快速排序:找到第一个数字在顺序的位置下标,将n个数字分为两半,比第一个数字大的全在右边,小的全在左边,左右两半再用前面的方法继续分为两半直到只有一个数字。
快速排序:
C代码:
#include <stdio.h>
void QuickSort(int *a,int low ,int high);//快排
int FindPos(int *a,int low,int high);//找到第一个数字的下标
int main(){
int a[6]={2,1,0,5,4,-1};
QuickSort(a,0,5);//第二个参数表示第一个元素的下标,第三个参数表示最后一个元素的下标
for(int i=0;i<6;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
void QuickSort(int *a,int low ,int high){
int pos;
if(low<high){
pos=FindPos(a,low,high);
QuickSort(a,low,pos-1);
QuickSort(a,pos+1,high);
}
else
return;
}
int FindPos(int *a,int low,int high){
int val=a[low];
while(low<high){
while(low<high && a[high]>=val)
--high;
a[low]=a[high];
while(low<high && a[low]<=val)
++low;
a[high]=a[low];
}//中止while循环后low和high一定是相等的
a[low]=val;
return low;//low=high
}
c++代码:
#include <iostream>
class QuickArray{
public:
int *a;//要排序的数组
int num;//数组大小
QuickArray();//构造函数,初始化
void QuickSort(int low ,int high);//快排
int FindPos(int low,int high);//找到第一个数字的下标
};
int main(){
QuickArray array;
array.QuickSort(0,array.num-1);//第二个参数表示第一个元素的下标,第三个参数表示最后一个元素的下标
for(int i=0;i<array.num;i++)
std::cout<<array.a[i]<<" ";
std::cout<<"\n";
return 0;
}
void QuickArray::QuickSort(int low ,int high){
int pos;
if(low<high){
pos=FindPos(low,high);
QuickSort(low,pos-1);
QuickSort(pos+1,high);
}
else
return;
}
int QuickArray::FindPos(int low,int high){
int val=a[low];
while(low<high){
while(low<high && a[high]>=val)
--high;
a[low]=a[high];
while(low<high && a[low]<=val)
++low;
a[high]=a[low];
}//中止while循环后low和high一定是相等的
a[low]=val;
return low;//low=high
}
QuickArray::QuickArray(){
std::cout<<"请输入你想排序的数字数量:\n";
std::cin>>num;
a=new int(num);
std::cout<<"请输入要排序的数字:\n";
for(int i=0;i<num;i++)
std::cin>>*(a+i);
return;
}