Sắp xếp dữ liệu trong truy vấn. Lệnh SORT - sắp xếp các dòng trong một tệp văn bản. Sắp xếp trong thư mục

Tôi đang cố gắng tìm hiểu sự khác biệt giữa Sắp xếp chèn và Sắp xếp lựa chọn.

Cả hai dường như có hai thành phần: danh sách chưa sắp xếp và danh sách được sắp xếp. Cả hai đều dường như lấy một phần tử từ danh sách chưa sắp xếp và đặt nó vào danh sách đã sắp xếp vào đúng vị trí. Tôi đã thấy một số trang web/sách nói rằng sắp xếp thực hiện điều đó bằng cách thay thế từng cái một, trong khi sắp xếp chèn chỉ tìm đúng vị trí và chèn nó. Tuy nhiên, tôi đã thấy các bài viết khác nói điều gì đó nói rằng sắp xếp chèn cũng là một sự hoán đổi. Vì vậy, tôi bối rối. Có nguồn kinh điển nào không?

15 câu trả lời

Sắp xếp lựa chọn:

Cho một danh sách, lấy phần tử hiện tại và hoán đổi nó với phần tử nhỏ nhất ở bên phải phần tử hiện tại.

Chèn sắp xếp:

Cho một danh sách, lấy phần tử hiện tại và chèn nó vào vị trí danh sách thích hợp, điều chỉnh danh sách mỗi lần bạn chèn. Điều này tương tự như việc đặt bài trong trò chơi bài.

Độ phức tạp về thời gian của sắp xếp lựa chọn luôn là n(n - 1)/2, trong khi sắp xếp chèn có độ phức tạp về thời gian khó hơn vì độ phức tạp trong trường hợp xấu nhất của nó là n(n - 1)/2. Thông thường, giá trị này sẽ nhỏ hơn hoặc bằng giá trị so sánh, sau đó là n(n - 1)/2 .

Cả sắp xếp sắp xếp và lựa chọn sắp xếp đều có vòng lặp bên ngoài (trên mỗi chỉ mục) và vòng lặp bên trong (trên một tập hợp con các chỉ mục). Mỗi lượt của vòng lặp bên trong sẽ mở rộng vùng đã sắp xếp thêm một phần tử với chi phí là vùng chưa được sắp xếp cho đến khi không còn phần tử nào chưa được sắp xếp.

Sự khác biệt là những gì vòng lặp bên trong thực hiện:

    Trong sắp xếp sắp xếp, vòng lặp bên trong bao gồm các phần tử chưa được sắp xếp. Mỗi lượt chọn một phần tử và di chuyển nó đến vị trí cuối cùng (ở cuối hiện tại của khu vực được sắp xếp).

    Trong sắp xếp chèn, mỗi lượt của vòng lặp bên trong được lặp lại trên các phần tử đã được sắp xếp. Các phần tử đã được sắp xếp sẽ được dịch chuyển cho đến khi vòng lặp tìm đúng vị trí để chèn phần tử chưa được sắp xếp tiếp theo.

Vì vậy, sắp xếp sẽ sắp xếp các mục được sắp xếp theo thứ tự đầu ra và giữ nguyên vị trí sau khi tìm kiếm chúng. Ngược lại, với kiểu sắp xếp chèn, các phần tử chưa được sắp xếp vẫn được đưa vào cho đến khi được sử dụng theo thứ tự đầu vào, trong khi các phần tử của vùng được sắp xếp sẽ di chuyển xung quanh.

Về trao đổi: lựa chọn sắp xếp thực hiện một lần hoán đổi cho mỗi lượt của vòng lặp bên trong. Sắp xếp chèn thường lưu trữ phần tử được chèn dưới dạng tạm thời trước vòng lặp bên trong, chừa chỗ cho vòng lặp bên trong bù đắp cho các phần tử đã sắp xếp theo một phần tử, sau đó sao chép tạm thời vào điểm chèn sau đó.

Có lẽ sự nhầm lẫn là bạn đang so sánh mô tả sắp xếp danh sách liên kết với mô tả sắp xếp một mảng. Nhưng tôi không thể chắc chắn vì bạn không đề cập đến nguồn của mình.

Cách dễ nhất để hiểu các thuật toán sắp xếp thường là lấy mô tả chi tiết về thuật toán (không phải những thứ mơ hồ như "loại này sử dụng trao đổi. Ở đâu đó tôi không nói ở đâu"), lấy thẻ trò chơi (5-10 là đủ cho đơn giản). thuật toán sắp xếp) và chạy thuật toán theo cách thủ công.

Sắp xếp sắp xếp: Quét qua dữ liệu chưa sắp xếp để tìm phần tử nhỏ nhất còn lại, sau đó hoán đổi vị trí ngay sau dữ liệu đã sắp xếp. Lặp lại cho đến hết. Khi sắp xếp danh sách, bạn không cần thay đổi phần tử tối thiểu thành vị trí, thay vào đó bạn có thể xóa nút danh sách khỏi vị trí cũ và chèn vào nút mới.

Chèn sắp xếp: Lấy phần tử ngay sau dữ liệu đã sắp xếp, xem qua dữ liệu đã sắp xếp để tìm vị trí đặt nó và đặt nó ở đó. Lặp lại cho đến hết.

Sắp xếp chèn có thể sử dụng trao đổi trong giai đoạn "quét", nhưng điều đó không bắt buộc và đó không phải là cách hiệu quả nhất trừ khi bạn sắp xếp một mảng thuộc loại dữ liệu: (a) không thể di chuyển được, chỉ sao chép hoặc hoán đổi; và (b) sao chép đắt hơn so với trao đổi. Nếu kiểu sắp xếp chèn sử dụng hoán đổi, thì cách thức hoạt động của nó là bạn đồng thời tìm kiếm một địa điểm và đặt một phần tử mới vào đó, liên tục hoán đổi phần tử mới với phần tử ngay trước nó, miễn là phần tử trước nó lớn hơn nó. Khi bạn tiếp cận một phần tử không lớn hơn, bạn đã tìm đúng vị trí và sẽ chuyển sang phần tử mới tiếp theo.

Logic của cả hai thuật toán khá giống nhau. Cả hai đều có ma trận con được sắp xếp một phần ở đầu mảng. Sự khác biệt duy nhất là cách họ tìm kiếm phần tử tiếp theo được đặt trong mảng đã sắp xếp.

    Sắp xếp chèn: thêm phần tử tiếp theo vào đúng vị trí;

    Sắp xếp sắp xếp: chọn phần tử nhỏ nhất và trao đổi nó với phần tử hiện tại;

Bên cạnh đó, Sắp xếp chènổn định, không giống như Chọn sắp xếp.

Tôi đã triển khai cả hai trong python và điều đáng chú ý là chúng giống nhau như thế nào:

Chèn chắc chắn (dữ liệu): data_size = len(data) current = 1 while current< data_size: for i in range(current): if data < data[i]: temp = data[i] data[i] = data data = temp current += 1 return data

Với một sửa đổi nhỏ, bạn có thể thực hiện thuật toán lựa chọn Sắp xếp.

Lựa chọn chắc chắn (dữ liệu): data_size = len(data) current = 0 while current< data_size: for i in range(current, data_size): if data[i] < data: temp = data[i] data[i] = data data = temp current += 1 return data

Tóm lại, tôi nghĩ sắp xếp sắp xếp trước tiên sẽ tìm giá trị nhỏ nhất trong mảng và sau đó thực hiện hoán đổi, trong khi sắp xếp chèn lấy một giá trị và so sánh nó với mọi giá trị còn lại trước (phía sau) nó. Nếu giá trị nhỏ hơn, nó sẽ được hoán đổi. Sau đó, giá trị tương tự sẽ được so sánh lại và nếu nó nhỏ hơn phía sau thì nó lại được hoán đổi. Hy vọng điều này có ý nghĩa!

Sắp xếp lựa chọn: Khi bạn bắt đầu tạo danh sách con đã sắp xếp, thuật toán đảm bảo rằng danh sách con đã sắp xếp luôn được sắp xếp hoàn toàn, không chỉ theo các phần tử riêng của nó mà còn theo mảng đầy đủ, tức là cả danh sách con đã sắp xếp và chưa sắp xếp. Do đó, phần tử nhỏ nhất mới, sau khi được tìm thấy từ danh sách con chưa sắp xếp, sẽ chỉ được thêm vào cuối danh sách con đã sắp xếp.

Sắp xếp chèn: Thuật toán lại chia mảng thành hai phần, nhưng ở đây phần tử được chọn từ phần thứ hai và chèn vào đúng vị trí trong phần đầu tiên. Điều này không bao giờ đảm bảo rằng phần đầu tiên sẽ được sắp xếp theo mảng đầy đủ, mặc dù tất nhiên lần cuối cùng sẽ có từng phần tử ở đúng vị trí được sắp xếp.

Tôi sẽ thử lại một lần nữa: hãy xem xét điều gì xảy ra trong trường hợp may mắn của một mảng gần như được sắp xếp.

Khi sắp xếp, một mảng có thể được coi là có hai phần: phần bên trái được sắp xếp, phần bên phải chưa được sắp xếp.

Sắp xếp chèn - chọn phần tử chưa được sắp xếp đầu tiên và cố gắng tìm một vị trí cho nó trong phần đã được sắp xếp. Vì bạn đang tìm kiếm từ phải sang trái, nên có thể phần tử được sắp xếp đầu tiên mà bạn so sánh (phần tử lớn nhất, ngoài cùng bên phải ở phía bên trái) nhỏ hơn phần tử đã chọn, vì vậy bạn có thể ngay lập tức tiếp tục với phần tử chưa được sắp xếp tiếp theo.

Sắp xếp sắp xếp - chọn phần tử chưa được sắp xếp đầu tiên và cố gắng tìm phần tử nhỏ nhất của toàn bộ phần chưa được sắp xếp và thay thế hai phần tử đó nếu muốn. Vấn đề là vì phía bên phải chưa được sắp xếp nên bạn phải nghĩ đến từng phần tử mỗi lần, vì bạn không thể chắc chắn liệu có phần tử nào nhỏ hơn phần tử được chọn hay không.

LỰA CHỌN SẮP XẾP
Giả sử có một dãy số được viết theo một cách cụ thể/ngẫu nhiên và chúng ta có thể nói rằng chúng ta nên sắp xếp chúng theo thứ tự tăng dần. Đồng thời lấy từng số một và thay thế chúng bằng số nhỏ nhất. có sẵn trong danh sách. bằng cách thực hiện bước này, cuối cùng chúng ta sẽ nhận được kết quả mong muốn.

CHÈN SẮP XẾP
Hãy ghi nhớ giả định tương tự, nhưng điểm khác biệt duy nhất là lần này chúng tôi chọn từng số một và dán nó vào phần được chỉnh sửa trước, điều này làm cho việc so sánh nhỏ hơn và do đó hiệu quả hơn.

Nói ngắn gọn,

Sắp xếp sắp xếp: Chọn phần tử đầu tiên từ mảng chưa được sắp xếp và so sánh nó với các phần tử chưa được sắp xếp còn lại. Nó tương tự như Bubble Sort, nhưng thay vì thay thế từng phần tử nhỏ hơn, nó giữ chỉ mục của phần tử nhỏ nhất được cập nhật và thay thế nó ở cuối mỗi vòng lặp.

Sắp xếp chèn:. Nó ngược lại với sắp xếp lựa chọn, trong đó nó chọn phần tử đầu tiên từ ma trận con chưa được sắp xếp và so sánh nó với ma trận con đã sắp xếp và chèn phần tử nhỏ nhất được tìm thấy và dịch chuyển tất cả các phần tử đã sắp xếp từ bên phải của nó sang phần tử chưa được sắp xếp đầu tiên.

Vòng lặp bên trong của sắp xếp chèn đi qua các phần tử đã được sắp xếp (ngược lại với sắp xếp sắp xếp). Điều này cho phép anh ta phá vỡ vòng lặp bên trong khi tìm thấy vị trí chính xác. Có nghĩa là:

  1. Vòng lặp bên trong sẽ chỉ đi qua một nửa số phần tử của nó trong trường hợp trung bình.
  2. Vòng lặp bên trong sẽ bị ngắt sớm nếu mảng gần như được sắp xếp.
  3. Vòng lặp bên trong sẽ hủy ngay lập tức nếu mảng đã được sắp xếp, làm cho độ phức tạp của việc sắp xếp chèn trở nên tuyến tính trong trường hợp này.

Việc sắp xếp lựa chọn phải luôn đi qua tất cả các phần tử bên trong của vòng lặp. Đây là lý do tại sao phương pháp sắp xếp chèn chủ yếu được ưa chuộng hơn để sắp xếp. Nhưng mặt khác, việc sắp xếp lựa chọn thực hiện ít hoán đổi nguyên tử hơn nhiều, điều này có thể quan trọng hơn trong một số trường hợp.

Xin chào các độc giả thân mến. Danh sách được sắp xếp như thế nào? Tất nhiên, bạn có thể thực hiện việc này một cách thủ công, kéo từng cái một. Thoải mái? Đừng nghĩ. Hãy để tôi nói cho bạn một cách tốt hơn.

Tôi sẽ đưa ra ví dụ về công việc của tôi sử dụng Word 2013 làm ví dụ, nhưng phương pháp này cũng sẽ hoạt động với phiên bản Word 2010 và 2007.

Để minh họa cách sắp xếp tăng dần trong Word, tôi sẽ sử dụng một danh sách nhỏ các tên.

Thực hiện sắp xếp trong Word

Trước khi bắt đầu, bạn cần chọn nó bằng nút chuột trái. Sau đó, trên tab " trang chủ" Trong chuong " Đoạn văn"Có một nút đặc biệt. Cái mà? Hãy xem ảnh GIF bên dưới.

Trong cửa sổ " Sắp xếp văn bản» bạn có thể chọn Kiểu dữ liệu: văn bản, số hoặc ngày; và cũng chọn một phương pháp: tăng dần hoặc giảm dần. Tôi đã chọn tăng dần và loại văn bản.

Nhân tiện, nếu bạn nhấp vào nút Tùy chọn", thì bạn có thể định cấu hình các tùy chọn sắp xếp bổ sung trong Word.

Bây giờ, để hoàn thành nhiệm vụ của chúng tôi, bạn cần nhấp vào “ ĐƯỢC RỒI" Sau đó, chúng ta có một danh sách trong đó các tên được sắp xếp từ A đến Z.

Nếu bạn cần sắp xếp trong bảng Word, nguyên tắc cũng tương tự. Chọn cột và thực hiện các bước tương tự. Và nếu có số thì ghi vào ô số.

Nói chung là vậy thôi. Ngay cả khi bạn cần sắp xếp theo thứ tự bảng chữ cái trong Word 2010 cũng không có gì khó khăn vì giao diện tương tự nhau.