冒泡/選擇/插入/交換排序的c語言實現

插入排序

void Insertion_sort(int a[A], int x)
{

	int m = 0;
	int ab = 0;
	int temp = 0;
	int ipos = 0;
	int n = 0;
	for (m = 1; m < x; m++)
	{
		temp = a[m];
		ipos = m - 1;
		while ((ipos >= 0) && (temp < a[ipos]))
		{
			a[ipos + 1] = a[ipos];
			ipos--;
		}
		a[ipos + 1] = temp;
	}
	for (m = 1; m < x; m++)//拿出一個數
	{
		temp = a[m];//用變量存放,數組中的值不要改變
		for (n = m - 1; n >= 0; n--)//這個數的前n個數
		{

			if (temp <= a[n]) //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			{
				a[n + 1] = a[n];//則兩數交換,然後在和
				if (n == 0)
				{
					a[0] = temp;
				}
			}
			if (temp > a[n])
			{
				a[n + 1] = temp;
				break;

			}

		}

		printf("\r");
	}

	}

冒泡排序

int BubbleSort(int a[A], int x)
{
		int ab = 1;
		for (int trip = 0; trip < x; trip++)//控制比較的躺數!
		{
			int judge = 1;
			for (int i = 0; i < x - 1 - trip; i++)//每次從頭開始,比較,每一趟可以少比一個,因爲每一趟都把最大的數篩到最後了!
			{
				if (a[i] > a[i + 1])//兩書交換
				{
					a[i] = a[i] ^ a[i + 1];
					a[i + 1] = a[i] ^ a[i + 1];
					a[i] = a[i] ^ a[i + 1];
					judge = 0;//判斷!如果再一趟內,沒有進行任何兩數之間的交換,就不改變該zhi。從而檢測,檢測排序手機不是可以提前結束!從而避免不必要的多餘的循環
					ab++;
				}

			}
			if (judge == 1)
			{
				printf("BubbleSort  %d!!!!!!!!!!!!!\n", ab);
				return 0;
			}
		}
	}

.

選擇排序

int Selectionsort(int a[A], int x)
{
	int ab = 1;
	for (int trip = 0; trip < x-1; trip++)//
	{
		int mine = 0;
		mine = a[trip];//關鍵
		int subscript = trip;//關鍵
		for (int i = trip+1; i < x; i++)
		{
			if (mine > a[i])
			{
				mine = a[i];//記錄最小的值
				subscript = i;//記錄下標
				ab++;
			}
		
		}
		
		a[subscript] = a[trip];//兩書交換,最小值賦值
		a[trip] = mine;//關鍵

	}
	printf("Selectionsort  %d!!!!!!!!!!!!!\n", ab);
	return 0;
}

交換排序

void Exchange(int a[A],int x)
{
	int ab = 1;
	for (int z = 0; z < x-1; z++)//每次的起始位置!如同拿出一個數,
	{
		for (int y = z+1; y < x; y++)//與這個數後面的每一個數比較

		{
			
			if (a[z] > a[y])
			{
				a[y] = a[y] ^ a[z];
				a[z] = a[y] ^ a[z];
				a[y] = a[y] ^ a[z];
				ab++;
			}
			
		}//將拿出來的這個數,和後面的數比較,比較完了之後,可以確保,拿出來的這個數是這個數和他以後的·所有數中最小/大的一個
		//然後拿出下一個數,再進行相同操作,拿出來的每個數都是再除去前面的數的 1其他數中的最值
	} 
	printf(" EXchange  %d!!!\n",ab);
	
}

通過減少每次比較時大數小數交換位置時的賦值操作,來達到算法優化的目的。

快排歸併正在學習中。字符串模式匹配暴力算法即將呈現,kmp正在問老師的路上233

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章