1. 程式人生 > >模仿qsort的功能實現一個通用的氣泡排序。

模仿qsort的功能實現一個通用的氣泡排序。

#define _CRT_SECURE_NO_WARNINGS 1    
#include<stdio.h>    
#include <stdio.h>  
int cmp(const void*n1, const void*n2)      //判斷n1,n2元素大小,n1比n2大返回正數;小返回負數,相同返回0    
{  
    return *(char*)n1 - *(char*)n2;        //升序    
}  
  
void Swap(char *buf1, char* buf2, int width)  //交換每個位元組    
{  
    int i = 0;  
    for (i = 0; i < width; i++)  
    {  
        char tmp = *buf1;  
        *buf1 = *buf2;  
        *buf2 = tmp;  
        buf1++;  
        buf2++;  
    }  
}  
  
void bubble_sort(void*base, int sz, int width, int(*cmp)(const void* n1, const void*n2))  //模擬實現qsort    
{  
    int i = 0;  
    for (i = 0; i < sz - 1; i++)  
    {  
        int j = 0;  
        for (j = 0; j < sz - 1 - i; j++)  
        {  
            int ret = cmp(((char*)base + (j*width)), ((char*)base + (j + 1)*width));  
            if (ret>0)  
            {  
                Swap(((char*)base + (j*width)), ((char*)base + (j + 1)*width), width);  
            }  
        }  
    }  
}  
  
int main()  
{  
    int arr[] = { 5, 4, 3, 2, 1 }; 
int i = 0; 
char arr1[] = { 'z', 'l', 's', 'x', 'm' };
    bubble_sort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), cmp);  
    
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)  
    {  
        printf("%d ", arr[i]);  
    }  
    printf("\n");  
      
    bubble_sort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp);  
    for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)  
    {  
        printf("%c ", arr1[i]);  
    }  
    printf("\n");  
    system("pause");  
    return 0;  

相關推薦

模仿qsort功能實現一個通用氣泡排序

#define _CRT_SECURE_NO_WARNINGS 1    #include<stdio.h>    #include <stdio.h>  int cmp(const void*n1, const void*n2)      //判斷n

[Golang] 實現一個通用排序方式(對任意資料型別構成的slice排序

前言: Go 語言中排序主要使用的sort庫,對於常見資料型別string, int ,float構成的Slice,可以使用sort庫對應的sort.Strings() / sort.Ints() / sort.Float64s()直接排序,但是對於複雜型別struct構成的Sli

C#小練習(設計一個程式,輸入10個數存入陣列中,然後實現氣泡排序

/* (程式頭部註釋開始) * 程式的版權和版本宣告部分 * Copyright (c) 2011, 煙臺大學計算機學院學生 * All rights reserved. * 檔名稱:

Java實現陣列的氣泡排序

注意:     1 迴圈圈數越來越少     2 每次迴圈比較次數越來越少     3 每次比較都從索引0和索引1開始 public class BubbleSort{ public static void m

利用RBAC模型實現一個通用的許可權管理系統

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] public class PowerAttribute : LoginAttribute { /// <summary> 訪

模仿知乎——實現一個多使用者線上問答平臺

online-questioning 從零開始開發線上問答平臺, 這是我模仿知乎做的一個貼吧類問答交流平臺 專案github地址:https://github.com/guomzh/online-questioning , 歡迎各位star和與我交流 本文持續更新,未完待續…

C語言實現簡單的氣泡排序

用C實現氣泡排序       常用的排序方法有氣泡排序法,選擇排序法,插入排序法以及希爾排序法等。本文著重講解如何利用C程式碼,實現氣泡排序。       首先,要了解什麼是氣泡排序。氣泡排序是常用的一種排序方法,其基本方法就是逐次比較。即一次比較兩個數,若它們的順序錯誤,

python實現插入和氣泡排序

開始學習python,看到函式一章,練習之餘,寫了兩個排序小函式 def select_sort(n): for i in range(len(n)): for j in

POI實現一個通用的Excel讀取模板

    POI是Apache基金會的提供的java實現的一套用於讀取Excel、Word、PPT等文件的庫,在實際專案中可能 很多地方都會用到Excel的讀取,比如Excel的匯入,我們不可能每個地方都單獨實現一套Excel的讀取方法,這時候就需要封裝一個通用的類,只要有讀取

組合語言實現簡單的氣泡排序

        最近在學彙編,為逆向打基礎,順手寫了一個彙編實現氣泡排序的小程式,程式碼已做好註釋,有興趣的可以簡單看看。 BUF1-BUF10與BUF關係圖(BUF中的90 80 70 60......為示例資料) ARRADSBUF與BUF1-BUF10關係圖 ;定

用Java寫一個氣泡排序

氣泡排序幾乎是個程式設計師都寫得出來,但是面試的時候如何寫一個逼格高的氣泡排序卻不是每個人都能做到,下面提供一個參考程式碼: import java.util.Comparator; /**

java實現陣列的氣泡排序、選擇排序程式碼

陣列排序之氣泡排序: 相鄰元素兩兩比較,大的往後放,第一次完畢,最大值出現在了最大索引處 package cn.lgt.sortarray; public class MaoPaoSort {

golang 實現一個通用協程池

golang 是一門很優秀的語言,語法簡單,功能強大 ,支援的 channal、goroutine 等都是非常優秀的特性。由於之前用golang 重構一個專案,對golang不是太瞭解,栽了不少坑,其中主要問題為:1. go 直接協程執行函式、方法,大併發的時候不太可控會導致

63.實現一個拖拽排序

ddc 圖片 html list before children 實現 vue.js script //為了方便借助vue和jquery <!DOCTYPE html> <html lang="en"> <head>

用Python3實現一個簡單的爬蟲

import urllib import urllib.request def loadPage(url,filename): """ 作用:根據url傳送請求,獲取html資料;

Java:通過TreeSet,Comparator實現對字串的排序

TreeSetTest.java import java.util.Comparator; import java.util.Set; import java.util.TreeSet; public class TreeSetTest { publ

設計一個包含一個interface,三個class的Java 程式,用於完成陣列排序排序任務其中interface中包含一個sort() 方法一個class使用氣泡排序實現interface的

題目:設計一個包含一個interface,三個class的Java 程式,用於完成陣列排序排序任務。其中interface中包含一個sort() 方法。第一個class使用氣泡排序法實現interface的sort()方法;第二個class使用選擇排序法實現interface的sort()方法;

小川學習筆記--JAVA一個實現多種排序氣泡排序、快速排序、選擇排序、插值排序

JAVA氣泡排序、快速排序、選擇排序、插值排序 作者:程式猿劉小川 public static void main(String[] args) //主程式 { int data[] = {5,7,1,0,2,3,4,66,9,8};

JAVA一個實現多種排序氣泡排序、快速排序、選擇排序、插值排序

JAVA氣泡排序、快速排序、選擇排序、插值排序 作者:程式猿劉小川 public static void main(String[] args) //主程式 { int data[] = {5,7,1,0,2,3

用C語言模擬實現一個通訊錄,要求實現其新增 刪除 修改 查詢 模糊搜尋姓名和號碼 顯示和排序聯絡人資訊的功能

                題目:用C語言模擬實現一個通訊錄,要求實現其新增、刪除、修改、查詢、模糊搜尋姓名和號碼、顯示和排序