1. 程式人生 > >快速排序法 拉格朗日插值法 二分法

快速排序法 拉格朗日插值法 二分法

快速排序法(泛型)

static void Main(string[] args)
 {
     Console.WriteLine("請輸入待排序數列(以\",\"分割):");
     string _s = Console.ReadLine();
     string[] _sArray = _s.Split(",".ToCharArray());
     int _nLength = _sArray.Length;
     int[] _nArray = new int[_nLength];
     for (int i = 0; i < _nLength;
i++) { _nArray[i] = Convert.ToInt32(_sArray[i]); } var list = _nArray.ToList(); QuickSort(list, 0, _nLength - 1); foreach (var i in list) { Console.WriteLine(i.ToString()); } while (true) { Thread.Sleep(10000); } } //獲取按樞軸值左右分流後樞軸的位置
private static int Division(List<int> list, int left, int right) { while (left < right) { int num = list[left]; //將首元素作為樞軸 if (num > list[left + 1]) { list[left] = list[left + 1]; list[left + 1] = num; left++; }
else { int temp = list[right]; list[right] = list[left + 1]; list[left + 1] = temp; right--; } Console.WriteLine(string.Join(",", list)); } Console.WriteLine("--------------\n"); return left; //指向的此時樞軸的位置 } private static void QuickSort(List<int> list, int left, int right) { if (left < right) { int i = Division(list, left, right); //對樞軸的左邊部分進行排序 QuickSort(list, i + 1, right); //對樞軸的右邊部分進行排序 QuickSort(list, left, i - 1); } }

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
拉格朗日插值法(C++語言)

 <pre name="code" class="cpp">void search2(int a[M], int num)
{
	int tou = 0;
	int wei = M - 1;
	int zhong;
	int flag = -1;//一開始找不到
	int  ci = 0;
	while (tou <= wei)
	{
		ci++;
		//zhong =tou+ ( wei-tou) / 2;
		zhong = tou + (wei - tou) *1.0*(num - a[tou]) / (a[wei] - a[tou]);
		printf("%d   %d   %d   %d\n", tou, wei, zhong, ci);
		if (num == a[zhong])
		{
			printf("一共查詢%d次    找到:a[%d]=%d\n", ci, zhong, num);
			flag = 1;//找到
			break;
		}
		else if (num > a[zhong])
		{
			tou = zhong + 1;
		}
		else
		{
			wei = zhong - 1;
		}
	}
	if (-1 == flag)
	{
		printf("沒有找到\n");
	}
}
//二分查詢 拉格朗日插值查詢
void main()
{
	int a[M];
	for (size_t i = 0; i < M; i++)
	{
		a[i] = i;
		printf("%d    ", i);
	}
	printf("\n請輸入要查詢的資料:");
	int num;
	scanf("%d", &num);
	search2(a, num);
	system("pause");
}

====================================================================================================================================================================

二分法

public static int BinarySearch(int[] arr, int low, int high, int key)
        {
            int mid = (low + high) / 2;
            if (low > high)
                return -1;
            else
            {
                if (arr[mid] == key)
                    return mid;
                else if (arr[mid] > key)
                    return BinarySearch(arr, low, mid - 1, key);
                else
                    return BinarySearch(arr, mid + 1, high, key);
            }
        }





int[] y = new int[] {1,2,3,4,5,6,7,8,9,10,11,12,13 };
int rr = BinarySearch(y, 0, y.Length - 1, 13);
Console.Write(rr);    //12