1. 程式人生 > >氣泡排序可以排序多個字串

氣泡排序可以排序多個字串

在實現多個字串的排序之前,先來回顧一下氣泡排序:
演算法原理:
每次對相鄰的兩個元素進行比較,若前者大於後者則交換,如此一趟下來最後一個則是最大的一個元素;重複以上步驟,除了已經確定位置的元素。
演算法實現:

void swap(int *a, int *b)
{
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
}
void bubble_sort(int arr[],int length)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < length
-1; i++) { for (j = 0; j < length - i-1; j++) { if (arr[j]>arr[j + 1]) swap(&arr[j], &arr[j + 1]); } } }

演算法優化:

void swap(int *a, int *b)
{
    int temp = 0;
    temp = *a;
    *a = *b;
    *b = temp;
}
void bubble_sort2(int *arr
, int length) { int i = 0; int j = 0; int flag = 1; for (i = 0; i < length - 1; i++) { flag = 0;//每次先重置為0 for (j = 0; j < length - 1 - i; j++) { if (arr[j]>arr[j + 1]) { swap(&arr[j], &arr[j + 1]); flag = 1
; } } if (!flag) break; } }

優化原理:
如上面的程式碼,裡面的一層迴圈在某次掃描中若沒有交換則說明此時陣列已經全部有序,無需再掃描了。因此,可以增加一個標記,每交換一次就進行標記,如果某次迴圈完沒有標記,則說明已經完成排序了。

現在來說說如何用氣泡排序對多個符串進行排序:
演算法原理:假設對3個字串進行排序,每個字串的字元數不超過10個,那麼便可以把這三個字串看成是個二維陣列,如此一個指向一維陣列的指標就可以訪問該陣列,然後在根據氣泡排序的原理便可對其排序。
演算法實現:

void arr_bubble_sort(char(*p)[10])//陣列指標,即指向大小為10的陣列的指標
{
     int i = 0;
     int j = 0;
     char temp[10] ;
     char *t = temp;
     for (i = 0; i < 3; i++)
     {
        for (j = 0; j < 3 - i-1; j++)
        {
           if (strcmp(p[j], p[j + 1])>0)
           {
              strcpy(t, p[j]);
              strcpy(p[j], p[j + 1]);
              strcpy(p[j + 1], t);
           }
        }
     }
}
int main()
{
     char a[3][10] = { "aacd", "aaer", "aaiu" };
     char i = 0;
     char (*p)[10] = { 0 };
     p = a;//p指向a的第0行
     arr_bubble_sort(p);
     for (i = 0; i < 3; i++)
     {
        printf("%s\n", a[i]);//按行輸出
     }
     system("pause");
     return 0;
}

相關推薦

氣泡排序可以排序字串

//寫氣泡排序可以排序多個字串 #include <stdio.h> #include <string.h> void bubble_sort_str(char *str[], int sz) { int i = 0; int j = 0; for (i =

字串使用氣泡排序法的python實現

今天在上資料結構與演算法課的時候,老師突擊測試,讓我們用氣泡排序演算法實現對多個字串的降排序,平常 老師講課都用C++,但我沒學過,而之前學過的C語言太久沒用,也忘得差不多了,迫不得已,拿起了最近在學習的 Python試水。當時想網路借鑑一下別人的程式碼,但

【C語言】寫氣泡排序可以排序字串

這道題是氣泡排序的簡單延伸,程式碼如下:  #define _CRT_SECURE_NO_WARNINGS 1 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #inc

氣泡排序可以排序字串

在實現多個字串的排序之前,先來回顧一下氣泡排序: 演算法原理: 每次對相鄰的兩個元素進行比較,若前者大於後者則交換,如此一趟下來最後一個則是最大的一個元素;重複以上步驟,除了已經確定位置的元

氣泡排序字串

氣泡排序數組裡的數字,應該都做過,那排序多個字串呢? 冒泡法,它重複地訪問要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。時間複雜度O(n)。 這裡是多個字串,在文字常量區,除了可以用指標進行操作之外,還可以進行“字串自己的辦法”

java實現字串排序

編寫應用程式,該類中有一個方法sort()(其原型為:void sort(String str[])),從命令列傳入多個字串,呼叫方法sort()對該字串陣列按字典順序從小到大排序。 程式碼如下: import java.util.*; public clas

Java練習題_集合、排序 從鍵盤輸入接收字串, 直到輸入quit的時結束輸入, 把輸入過的字串倒序排序輸出

程式啟動之後, 可以從鍵盤輸入接收多個字串, 直到輸入quit的時結束輸入, 把輸入過的字串倒序排序輸出。 這題吧。。。有些同學就會有不同的理解 舉例: 輸入:“acb”,“dfge”,"ba" 有些同學會理解為需要輸出:"ba",“dfge”,“acb” 而有些同學會理解為輸出:“ab”,“de

字串排序

#include<stdio.h> #include<string.h> int main() { char *str[] = { "hello", "world", "lets", "go" }; int i = 0; int j = 0;

react+redux狀態管理實現排序 合併reducer檔案

這個demo只有一個reducer 所以合併reducer這個demo用不到 ,但是我寫出來這樣大家以後可以用到,很好用,管理多個reducer,因為只要用到redux就不會只有一個reducer所以這個合併reducer很好用。 需要的技術:react-redux    redux實現狀態管理   裝飾器

python split使用分隔符分割字串

python內建的split()函式只能使用單個分隔符 text = '你好!吃早飯了嗎?再見。' text.split('!') Out[64]: ['你好', '吃早飯了嗎?再見。'] text.split('。|!|?') Out[65]: ['你好!吃早飯了

Blue Jeans POJ - 3080 (字串的最長公共子串)

題意:       給定n個字串,要你求出這n個字串的最長公共子串,如果存在多個輸出字典序最小的那個. 分析:        KMP+暴力去列舉即可. #include<stdio.h> #incl

c# 字串做分隔符, 雖然可以用正則做分隔符, 但是遇到特殊符號還真不好寫.自己寫了一個.

[TestMethod] public void TestMethod2() { string str = "aaa|||bbb|||ccc"; var rr= MySplit(str, "|

輸入字串或者數字

1 (10分) 編寫程式,輸入10個學生的學號和計算機科目成績,存放於列表中,存放方式為[[學號1,成績1],[學號2,成績2],...]。輸出此列表,輸出格式如下: 學號    成績 學號1    成績1 學號2    成績2 ... 提示:可以用列表的app

matlab字串連線(字串)的經驗

參考 matlab中字串連線的3種方法  文章,實驗遇到的一些小白問題,如有問題希望大神們給予指導。 Matlab中,兩個或多個字串連線常用的三種方法,如下: 背景知識: 1、char 和 string 區別 從定義的角度來說,單引號‘ ’定義的為char型別,雙

linux查詢文字字串的命令

我們一般檢視一個字串在一個文字中出現在哪行,一般使用的命令如下 比如 檢視catalina.out 中 a 出現的行,如下 less catalina.2018-12-17.out |grep a 如果說想要同時檢視多個字串出現的行,怎麼處理呢 小編不是專業的,也不太懂這些個命令,遇

長文字替換字串

package com; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Patte

C++檔案的讀寫和對字串的處理

C++讀寫檔案中的字串 今天幫人做了個簡單的作業,沒想到花時間最多的不是演算法而是檔案的讀寫,還有對讀入字串的分割處理。晚上寫作業的時候又用到了對字串的處理,這裡記錄一下。 小白第一次寫部落格,做的不好的請多多指正。 題目如下: Retail.dat檔案中包含了某零售商店

poj--3450 KMP求字串的最長公共子串

思路與前面的3080一樣 程式碼如下: #include<iostream> #include<cstdio> #include<cstring> using n

POJ 3450 Corporate Identity(kmp求字串的最長公共子串)

http://poj.org/problem?id=3450 #include <stdio.h> #include <string.h> const int max_N=

linux 用 grep 查詢單個或字串(關鍵字)

1、單個字串進行查詢:1、查詢當前目錄檔名中的字串:    grep  字串  檔名2、查詢某個檔案中字串,並輸出行號:grep -n 字串 檔名3、查詢當前目錄(包含子目錄)的字串:grep -r 字串 *4、查詢當前目錄(包含子目錄)的字串,並輸出行號:grep -rn