📜  门| GATE-CS-2006 |问题2(1)

📅  最后修改于: 2023-12-03 14:58:27.379000             🧑  作者: Mango

GATE-CS-2006 Problem 2

本题为GATE-CS-2006考试题中的第二道编程题。该题要求编写一段程序,实现以下功能:

  1. 输入多个整数,以-1作为输入结束标志。
  2. 对输入的整数进行排序,按照从小到大的顺序输出。
  3. 输出排序后第k小的数,其中k由用户输入。
实现思路

为了实现该程序,我们可以首先将输入的整数存储在一个数组中。然后,利用快速排序(quick sort)算法对数组进行排序。排序后,我们可以很容易地输出已排序的整数,并且可以根据用户输入的k值输出第k小的数。

以下是一个示范代码:

def partition(arr, low, high):
    i = (low - 1)
    pivot = arr[high]
    for j in range(low, high):
        if arr[j] <= pivot:
            i = i + 1
            arr[i], arr[j] = arr[j], arr[i]
    arr[i + 1], arr[high] = arr[high], arr[i + 1]
    return (i + 1)

def quickSort(arr, low, high):
    if low < high:
        pi = partition(arr, low, high)
        quickSort(arr, low, pi - 1)
        quickSort(arr, pi + 1, high)

arr = []
num = int(input("Enter numbers to be sorted (enter -1 to stop): "))
while num != -1:
    arr.append(num)
    num = int(input("Continue inputting numbers: "))

n = len(arr)
quickSort(arr, 0, n-1)
print("Sorted array is:")
for i in range(n):
    print("%d" % arr[i], end=' ')

k = int(input("\nEnter k: "))
print("The kth smallest element is %d" % arr[k-1])
解析

该代码使用了经典的快速排序算法。快速排序算法是一种高效的排序算法,时间复杂度为O(nlogn)。在该算法中,我们通过选择一个主元(pivot),将数组中的元素划分为两个子数组,一个子数组中的元素均小于主元,而另一个子数组中的元素均大于主元。然后,我们对这两个子数组分别递归地进行排序。

在该示范代码中,我们首先接受用户输入的整数,并将这些整数存储在一个数组中。接着,我们使用quickSort函数对数组进行排序,并输出排序后的结果。最后,我们接受用户输入的k值,并输出第k小的数。

用户可以根据实际情况调整具体的代码实现,以实现相应的功能。