C++选择排序——纳米级小白第一次写博客

本人菜鸡,第一次写博客,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; //找出数组最小值的下标
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值