commit 1a7670980a2aecf8ca7d0b1c66a191c8a85fa166 Author: 202310715200 INDRIS ALPASELA <202310715200@mhs.ubharajaya.ac.id> Date: Thu Oct 30 15:03:55 2025 +0700 Upload files to "/" Tugas 3 Android Studio Selection Sort diff --git a/MainActivity.kt b/MainActivity.kt new file mode 100644 index 0000000..2669e12 --- /dev/null +++ b/MainActivity.kt @@ -0,0 +1,133 @@ +package com.example.Kalkulator + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.Button +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + SelectionSortApp() + } + } +} + +@Composable +fun SelectionSortApp() { + var inputText by remember { mutableStateOf("") } + var numbers by remember { mutableStateOf(listOf()) } + var sortedNumbers by remember { mutableStateOf(listOf()) } + + fun selectionSort(list: List): List { + val arr = list.toMutableList() + for (i in 0 until arr.size - 1) { + var minIndex = i + for (j in i + 1 until arr.size) { + if (arr[j] < arr[minIndex]) { + minIndex = j + } + } + // Tukar posisi elemen + val temp = arr[i] + arr[i] = arr[minIndex] + arr[minIndex] = temp + } + return arr + } + + Scaffold( + topBar = { + TopAppBar( + title = { Text("Selection Sort Demo") }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color(0xFF1565C0), + titleContentColor = Color.White + ) + ) + } + ) { padding -> + Column( + modifier = Modifier + .padding(padding) + .fillMaxSize() + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + "Masukkan angka dipisahkan dengan koma (contoh: 5,3,8,1,4)", + fontSize = 16.sp + ) + + Spacer(modifier = Modifier.height(10.dp)) + + OutlinedTextField( + value = inputText, + onValueChange = { inputText = it }, + label = { Text("Input Angka") }, + singleLine = true, + modifier = Modifier.fillMaxWidth() + ) + + Spacer(modifier = Modifier.height(16.dp)) + + Button(onClick = { + try { + numbers = inputText.split(",").map { it.trim().toInt() } + sortedNumbers = selectionSort(numbers) + } catch (e: Exception) { + sortedNumbers = emptyList() + } + }) { + Text("Urutkan (Selection Sort)") + } + + Spacer(modifier = Modifier.height(20.dp)) + + if (sortedNumbers.isNotEmpty()) { + Text("Hasil Pengurutan:", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(8.dp)) + LazyColumn { + items(sortedNumbers) { num -> + Box( + modifier = Modifier + .fillMaxWidth() + .padding(4.dp) + .background(Color(0xFFBBDEFB)) + .padding(12.dp) + ) { + Text(text = num.toString(), fontSize = 20.sp) + } + } + } + } + } + } +}