用cmd实现冒泡排序
时间: 2023-10-19 19:05:29 浏览: 80
要在cmd中实现冒泡排序,你可以使用以下的Python代码:
```python
import sys
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
if __name__ == "__main__":
# 从命令行参数中获取待排序的数字列表
numbers = list(map(int, sys.argv[1:]))
print("排序前:", numbers)
bubble_sort(numbers)
print("排序后:", numbers)
```
将上述代码保存为 `bubble_sort.py` 文件,然后在cmd中执行以下命令以排序数字列表:
```
python bubble_sort.py 5 2 9 1 7
```
这将输出排序前和排序后的数字列表。请注意,你需要先安装Python并将其添加到环境变量中,以便在cmd中执行python命令。
相关问题
基于qt实现的可视化冒泡排序
冒泡排序,顾名思义就是像水中的气泡一样逐个升上来,这就意味着它是一种交换排序。基于QT实现的冒泡排序是一种图形界面化的交互排序方式。它可以将排序结果实时显示给用户,并且可以使用户在排序过程中随时停止、继续、重置或调整速度,非常方便和人性化。下面就详细说明一下QT冒泡排序的实现。
首先,需要一个图形界面容器来实现QT的图形展示,我们可以采用QWidget或者QMainWindow,本例中采用的是QMainWindow。然后,生成一些随机数用于排序,并且在界面中展示。 接下来,可以使用一个定时器来实时监测排序的过程,并且实时更新显示,这样可以保证程序能够响应用户的操作。定时器的设置可以采用QTimer,其信号槽可以用QCoreApplication::processEvents()刺激QT处理系统事件。
在冒泡排序算法中,我们仍然需要一个外循环用于遍历所有数据,还需要一个内循环来比较相邻的两个数据并交换其位置。在UI界面中,我们对应的是一个“start”按钮来启动排序,并且可以使用一些控件如滑动条或者下拉菜单来调整排序速度等参数。
当用户点击“start”按钮后,可以采用算法的时间复杂度来校准排序的速度,具体方法可以利用定时器中的定时间隔来计算。然后开始运行排序算法,并且根据算法的执行结果实时更新图形界面中的展示,也就是动态显示排序过程。
当排序结束时,我们还可以在UI界面中添加一些交互式的控件,比如“Restart”按钮和“Stop”按钮,来让用户可以重新启动排序或者停止排序并且退出程序。
综上所述,使用QT实现冒泡排序算法是一种直观、实用,和高效的交互式排序算法。它能够让用户在排序过程中实时监测排序结果,并且方便灵活地调整排序参数。而这样的体验在CMD命令行界面下是无法实现的。
react写一个冒泡排序
您可以使用以下docker-compose文件来创建一个运行go、kafka和elk的docker环境:
```
version: '3.3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
ports:
- "9200:9200"
- "9300:9300"
environment:
- discovery.type=single-node
kibana:
image: docker.elastic.co/kibana/kibana:7.9.2
ports:
- "5601:5601"
environment:
ELASTICSEARCH_URL: http://elasticsearch:9200
go-app:
build: .
ports:
- "8080:8080"
environment:
KAFKA_HOST: kafka:9092
ELASTICSEARCH_HOST: elasticsearch:9200
```
请将上面的docker-compose文件保存为`docker-compose.yml`,然后在该文件所在的目录中运行以下命令以启动docker环境:
```
docker-compose up
```
这将启动以下服务:
- Zookeeper:Kafka所需的分布式协调器。
- Kafka:消息队列,用于在Go应用程序和ELK之间传递消息。
- Elasticsearch:用于存储和索引日志数据的搜索引擎。
- Kibana:用于可视化和查询Elasticsearch中存储的数据。
- Go应用程序:用于生成和发送日志消息到Kafka,然后将其存储在Elasticsearch中。
请注意,上面的docker-compose文件中包括一个名为`go-app`的服务,该服务需要使用Dockerfile构建Go应用程序的镜像。在该文件所在的目录中创建一个名为`Dockerfile`的文件,并将以下内容复制到其中:
```
FROM golang:1.15-alpine
# Set the working directory
WORKDIR /app
# Copy the source code
COPY . .
# Build the binary
RUN go build -o main .
# Run the binary
CMD ["./main"]
```
接下来,您需要在`docker-compose.yml`文件所在的目录中创建一个名为`main.go`的Go应用程序文件,并将以下内容复制到其中:
```
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/Shopify/sarama"
"github.com/elastic/go-elasticsearch/v8"
)
type Log struct {
Message string `json:"message"`
}
func main() {
// Connect to Kafka
kafkaConfig := sarama.NewConfig()
kafkaConfig.Producer.Return.Successes = true
kafkaBroker := fmt.Sprintf("%s:%d", getEnv("KAFKA_HOST", "localhost"), getEnvAsInt("KAFKA_PORT", 9092))
producer, err := sarama.NewSyncProducer([]string{kafkaBroker}, kafkaConfig)
if err != nil {
log.Fatalf("Failed to connect to Kafka broker: %s", err)
}
defer producer.Close()
// Connect to Elasticsearch
elasticsearchConfig := elasticsearch.Config{
Addresses: []string{
fmt.Sprintf("http://%s:%d", getEnv("ELASTICSEARCH_HOST", "localhost"), getEnvAsInt("ELASTICSEARCH_PORT", 9200)),
},
}
elasticsearchClient, err := elasticsearch.NewClient(elasticsearchConfig)
if err != nil {
log.Fatalf("Failed to connect to Elasticsearch: %s", err)
}
// Send logs to Kafka and Elasticsearch
for i := 1; i <= 10; i++ {
log := Log{Message: fmt.Sprintf("Log message %d", i)}
logBytes, _ := json.Marshal(log)
// Send log to Kafka
kafkaMessage := &sarama.ProducerMessage{
Topic: "logs",
Value: sarama.StringEncoder(logBytes),
}
_, _, err := producer.SendMessage(kafkaMessage)
if err != nil {
log.Fatalf("Failed to send message to Kafka: %s", err)
}
// Send log to Elasticsearch
elasticsearchIndex := "logs"
elasticsearchDocument := string(logBytes)
elasticsearchResponse, err := elasticsearchClient.Index(elasticsearchIndex, nil, elasticsearch.DocumentSource{Body: []byte(elasticsearchDocument)})
if err != nil {
log.Fatalf("Failed to send message to Elasticsearch: %s", err)
}
defer elasticsearchResponse.Body.Close()
}
}
func getEnv(key, defaultValue string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return defaultValue
}
func getEnvAsInt(key string, defaultValue int) int {
if value, exists := os.LookupEnv(key); exists {
if intValue, err := strconv.Atoi(value); err == nil {
return intValue
}
}
return defaultValue
}
```
该应用程序将生成10条日志消息,并将每条消息发送到Kafka和Elasticsearch。请注意,该应用程序需要`sarama`和`go-elasticsearch`依赖项。您可以通过在`main.go`文件所在的目录中运行以下命令来安装这些依赖项:
```
go get github.com/Shopify/sarama
go get github.com/elastic/go-elasticsearch/v8
```
完成上述步骤后,您可以使用`docker-compose up`命令来启动docker环境,并使用以下URL访问Kibana界面:
```
http://localhost:5601
```
在Kibana界面中,您可以创建一个名为`logs-*`的索引模式,以查看从Go应用程序发送到Elasticsearch的日志数据。
阅读全文