本人菜鸡,第一次写博客,C++勉强及格,希望有大佬看到了可以来指点一下!
下面是菜鸡的代码。
/*选择排序 就是找一次一次的最小值的下标
然后做交换*/
#include<iostream>
using namespace std;
void selection_sort(int a[],int n);
int main()
{
int n;
cin>>n;
int *a=new int [n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
selection_sort(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
delete []a;
}
void selection_sort(int a[],int n)
{
for(int i=0;i<n;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(a[j]<a[i])
min=j; //找出当前循环次数最小值的下标
}
int t=a[min]; //交换数值
a[min]=a[i];
a[i]=t;
}
}
/*插入排序 将数字在比较的过程中插入到合适的位置*/
#include<iostream>
using namespace std;
void insertion_select(int a[],int n);
int main()
{
int n;
cin>>n;
int *a=new int [n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
insertion_select(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
delete []a;
}
void insertion_select(int a[],int n)
{
for(int i=1;i<n;i++) //从第二个数字开始
{
int key=a[i];
int j=i-1;
while(j>=0&&key<a[j]) //和前面的数字做比较一直比到第一个数字
{
a[j+1]=a[j];
j--;
}
a[j+1]=key; // 把数值拿出来插入到合适的位置
}
}
//冒泡排序,让大的数字沉底,小的数字升上来。
#include<iostream>
using namespace std;
void bubble_sort(int b[],int n);
int main()
{
int n;
cin>>n;
int *a=new int [n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
bubble_sort(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
delete []a;
}
void bubble_sort(int b[],int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++) //循环次数递减
{
if(b[j]>b[j+1]) //交换数字,让大的数字沉底
{
int t=b[j+1];
b[j+1]=b[j];
b[j]=t;
}
}
}
}
//快排代码,摘自啊哈算法 [滑稽][设会设会]
#include<iostream>
using namespace std;
int a[100];
void quick_sort(int left,int right);
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
quick_sort(0,n-1);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
}
void quick_sort(int left,int right)
{
int i,j,t,temp;
if(left>right)
return ;
i=left;
j=right;
temp=a[left]; //temp 中存的就是基准数
while(i!=j)
{
//顺序很重要,要先从右往做左找
//&引用一下大佬的讲解(https://blog.youkuaiyun.com/w282529350/article/details/50982650)
while(i<j&&a[j]>=temp)
j--;
//再从左往右找
while(i<j&&a[i]<=temp)
i++;
//交换两个数在数组中的位置
if(i<j)//当哨兵i和哨兵j没有相遇时
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
//最终将基准数归位
a[left]=a[i];
a[i]=temp;
quick_sort(left,i-1);
//后面就是两分处理继续处理左边的,这里时一个递归的过程
quick_sort(i+1,right);
//继续处理右边的,这里时一个递归的过程
}
后面再来一个有用的小东西
//
int maxvalue=*max_element(a,a+n); //找出数组最小值
int minvalue=*min_element(a,a+n); //找出数组最大值
int maxposition =max_element(a,a+n)-a; //找出数组最大值的下标
int minposition = min_element(a,a+n)-a; //找出数组最小值的下标