基本算法的回顾

考研结束了,不得不感慨这是一段很难忘的经历。在复习计算机专业课的过程中,不仅很大的提高了我对基础知识的掌握,也更加让我感慨算法的美妙。不知道为什么,自己对排序算法的感情尤为深,在今天下午滑水看直播的时候,脑子里突然蹦出了堆排序的想法,所以既然想法都出来了,那就实践一下,把当时复习的几种简单的排序算法再实现一下,温故而知新。
基本的排序算法主要分为插入排序,选择排序和交换排序。
一,插入排序
(1)直接插入排序

public static void InsertSort(int []A, int n )    //直接插入排序
	{
		int value;
		int i,j;
		for(i=1 ;i<n;i++ )
		{
			if(A[i]<A[i-1])
			{
				value = A[i];
				for(j=i-1;j>=0 && A[j]>value;j--)
					A[j+1] = A[j];
				A[j+1] = value;
			}    
		}
	}

(2)希尔排序

public static void ShellSort(int []A,int n)   //希尔排序
	{
		int j;
		for(int dk = n/2 ; dk>=1;dk = dk/2)
		{
			for(int i = dk ; i<n ; i++)
			{
				if(A[i] < A[i-dk])
				{
					int value = A[i];
					for(j = i-dk; j>0 &&A[j]>value; j = j-dk)
						A[j+dk] = A[j];
					A[j+dk] = value;
				}
			}
			
		}
		
	}

二,交换排序
(1)冒泡排序

public static void BubbleSort(int []A , int n)         //冒泡排序
	{
		int value;
		boolean flag;
		for(int i = 0 ; i<n-1 ; i++)
		{
			flag = false;
			for(int j = n-1; j>i; j--)
			{
				if(A[j]<A[j-1])
				{
					value = A[j];
					A[j] = A[j-1];
					A[j-1] = value;
					flag = true;
				}
			}
			if(flag == false)
				break;
				
		}	
	}

(2)快速排序

public static void QuickSort(int []A , int low , int high)        //快速排序
	{
		if(low < high)
		{
			int Part = Sort.Partition(A, low, high);
			QuickSort(A,low,Part-1);
			QuickSort(A,Part+1,high);
		}
		
		
		
	}
	public static int Partition(int []A, int low, int high)
	{
		int Pivot = A[low];
		while(low < high)
		{
			while(low < high && A[high] >= Pivot)  high--;
			A[low] = A[high];
			while(low < high && A[low] <= Pivot)  low++;
			A[high] = A[low];
		}
		A[low] = Pivot;
		return low;
	}

三,选择排序
(1)简单选择排序

public static void SelectSort(int []A , int n)
	{
		int value;
		for(int i = 0; i< n-1 ; i++)
		{
			int minp = i;
			for(int j = i+1; j < n; j++)
			{
				if(A[j] < A[minp])
					minp = j;
			}
			value = A[i];
			A[i] = A[minp];
			A[minp] = value;
			
		}
	}

(2)堆排序

public static void CreateHeap(int []A , int n)
	{
		int i;
		for( i = n/2 ; i>=1;i--)
			Sort.AdjustHeap(A, i, n);
	}
	public static void AdjustHeap(int []A , int k , int n)
	{
		 A[0] = A[k];
		 for(int i = 2*k ; i <=n; i*=2)
		 {
			 if(i<n&&A[i]<A[i+1])
				 i++;
			 if(A[0] >= A[i])
				 break;
			 else
			 {
				 A[k] = A[i];
				 k = i;
			 }
		 }
		 A[k] = A[0];
	}
	public static void HeapSort(int []A , int n)
	{
		int value;
		Sort.CreateHeap(A, n);
		for(int i = n ; i>=1;i--)
		{
			System.out.print(A[1] + " ");
			value = A[i];
			A[i] = A[1];
			A[1] = value;
			Sort.AdjustHeap(A, 1, i-1);
			
			
		}
	}
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Whynot0072

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值