排序算法一


3个简单的排序算法,不多解释了,直接上代码:

#include 
#include 

void Display(int a[], int n)
{
	for (int i = 0; i< n; ++i)
	{
		printf("%d, ", a[i]);
	}
	printf("\n");
}

void Exchange(int a[], int i, int j)
{
	int tmp = a[i];
	a[i] = a[j];
	a[j] = tmp;
}

//冒泡排序
void popSort(int a[], int n)
{
	bool tag = true;
	for (int i = 0; i< n && tag; ++i)
	{
		tag = false;
		for (int j = 0; j< n-i-1 ; j++)
		{
			if(a[j]< a[j+1])
			{
				//不断的交换到适合的位置
				Exchange(a, j , j+1);
				tag = true;
			}
		}//end for j
	}
	printf("popSort...\n");
	Display(a, n);
}

//选择排序
void SelectSort(int a[], int n)
{
	for (int i = 0; i< n; ++i)
	{
		int j =i;
		for (int k = i; k< n; ++k)
		{
			//经过比较,选择出最值的下标
			if(a[k] < a[j])
				j = k;
		}
		if(j != i)
			Exchange(a, i, j);
	}

	printf("SelectSort...\n");
	Display(a, n);
}

//插入排序
//(参考链表的插入排序,是假设分成2个链表来排序的)
  void InsertSort(int a[], int n)
  {
	  for (int i = 0; i< n; ++i)
	  {
		  //在原有数组中取出元素
		  int tmp = a[i];
		  int j =0;

		  //放到一个有序数组中
		  for (j = i-1; j>=0&&(tmp > a[j]); --j)
		  {
			  a[j+1] = a[j];

		  } 
		  a[j+1] = tmp;
	  }

	  printf("InsertSort...\n");
	  Display(a, n);
  }

int main()
{
	int a[6] = {5, 4, 3, 2, 1, 9};
	popSort(a, 6);
	SelectSort(a, 6);
	InsertSort(a, 6);
	system("pause");
	return 0;
}


你可能感兴趣的:(C++数据结构和算法)