排序效率较低的三种(从小到大)

Kinghero King of the summit 2023-08-16 20:32:35 2023-08-25 10:26:41 0
1.冒泡排序(稳定)

代码

void bubbleSort(int a[], int n)
{
    for(int i = n - 1; i > 0; i--)
    for(int j = 0; j < i; j++)
    if(a[j] > a[j+1]) swap(a[j], a[j+1]);
}

理念

它要比较相邻的两项,并且交换顺序排错的项。 每对数组进行一次遍历,就会有一个最大项排在了正确的位置。 大体上讲,数组的每一个数据项都会在其相应的位置“冒泡”。 若数组有n项,则需要遍历n-1次。
2.插入排序(稳定)

代码

void insertSort(int a[], int n)
{
   for(int i = 1; i < n; i++) //第一个元素作为基准元素,从第二个元素开始把其插到正确的位置
   {
	  if(a[i] < a[i-1]) //如果第i个元素比前面的元素小
	  {
	      int j = i-1;     //需要判断第i个元素与前面的多个元素的大小,换成j继续判断
              int x = a[i]; //将第i个元素复制为哨兵
	      while(j >= 0 && x < a[j]) //找哨兵的正确位置,比哨兵大的元素依次后移
	      {
                 a[j+1] = a[j]; 
	         j--;
	      }
	      a[j+1] = x;  //把哨兵插入到正确的位置
	  }   
   }
}

理念

其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。
3.选择排序(不稳定)

代码

void selectSort(int a[], int len)
{
 
	int minindex, temp;
	for(int i = 0; i<len-1;i++)
	{
	    minindex = i;
	    for(int j = i+1; j<len; j++)
		{
		    if(a[j]<a[minindex])
				minindex = j;
		
		}
		temp = a[i];
		a[i] = a[minindex];
		a[minindex] = temp;
	}
}

理念

选择排序一共有数组大小-1轮排序
每一轮排序,又是一个循环,循环的规则如下(在代码中实现):
先假定当前这个数是最小数
和后面的每个数进行比较,如果发现有比它更小的数,就重新确定最小数,并得到下标
当遍历完数组之后,就会得到本轮最小数及其下标
进行交换
{{ vote && vote.total.up }}

共 1 条回复

root 站长

点赞